Преобразование opencv sRGB в RGB

У меня есть фотографии iphone в нелинейном формате sRGB. Мне нужен линейный RGB. Я не мог найти способ в opencv (python) преобразовать их в линейный RGB.

Также пробовал конвертировать ImageMagick:

convert output0.jpg  -colorspace RGB output0.jpg

Все тот же sRGB не влияет.

Любые идеи ?


person 2adnielsenx xx    schedule 18.05.2018    source источник
comment
Вы имеете в виду AdobeRGB? Например, более широкая цветовая гамма?   -  person jmkmay    schedule 18.05.2018
comment
Я думаю, что ваша команда ImageMagick действительно преобразует в цветовое пространство RGB, но затем сохранение в формате JPEG снова преобразует его обратно в SRGB, поскольку предполагается, что файлы JPEG должны быть в цветовом пространстве sRGB. Если вы использовали convert iPhonePic.jpg -colorspace RGB result.png и загрузили его в OpenCV, у вас должно получиться лучше.   -  person Mark Setchell    schedule 18.05.2018


Ответы (2)


Лишь очень немногие форматы изображений действительно поддерживают линейный RGB. PNG можно, но не JPG. Вы можете сказать, что если значение гаммы равно 1, оно линейно. Вы можете обрабатывать в линейном цветовом пространстве с помощью ImageMagick, но при сохранении в JPG могут отображаться правильные линейные значения пикселей, но метаданные JPG не сохраняют тот факт, что это линейный RGB. Вы можете сказать, были ли данные пикселей изменены на линейные, если изображение темнее. Вы можете назначить линейный профиль для JPG, но я не уверен, где вы его найдете. Обратите внимание, что в очень старой версии ImageMagick цветовое пространство RGB фактически создавало sRGB и наоборот.

Например, ваша команда не вносит изменений, поскольку JPG на самом деле не поддерживает линейный RGB.

Вход:

введите здесь описание изображения

convert logo.jpg -colorspace RGB logoRGB.jpg

введите здесь описание изображения


Но PNG делает:

convert logo.jpg -colorspace RGB logoRGB.png

введите здесь описание изображения

Colorspace: RGB
Gamma: 1

Чтобы принудительно преобразовать в линейный RGB в JPG, вы можете сделать следующее, чтобы сделать пиксельные данные линейными. Но метаданные по-прежнему будут показывать нелинейный sRGB, гамма=0,4545.

convert logo.jpg -colorspace RGB -set colorspace sRGB logoRGB2.jpg

введите здесь описание изображения

Colorspace: sRGB
Gamma: 0.454545

РЕДАКТИРОВАТЬ: Следующая ссылка может быть полезна, если вам нужен линейный профиль RGB. См. http://fnordware.blogspot.com/2008/05/making-linear-icc-profile.html

person fmw42    schedule 18.05.2018

Вы можете использовать преобразование, указанное в ссылке ниже, для преобразования sRGB в XYZ.

Преобразование цветов в Matlab

Затем используйте cv::COLOR_XYZ2BGR или cv::COLOR_XYZ2RGB, чтобы получить RGB.

person Garvita Tiwari    schedule 18.05.2018