opencv sRGB到RGB转换

时间:2018-05-18 18:12:46

标签: opencv imagemagick rgb srgb

我有非线性sRGB格式的iphone照片。我需要线性RGB。我无法在opencv(python)中找到一种方法将它们转换为线性RGB。

还试过ImageMagick转换:

convert output0.jpg  -colorspace RGB output0.jpg

仍然相同的sRGB无效。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

只有极少数图像格式真正支持线性RGB。 PNG可以,但不是JPG。您可以判断伽玛值是否为1,它是线性的。您可以使用ImageMagick处理线性色彩空间,但保存到JPG可能会显示正确的线性像素值,但JPG元数据不会存储它是线性RGB的事实。如果图像较暗,您可以判断像素数据是否已更改为线性。您可以为JPG分配线性配置文件,但我不确定您在哪里找到它。请注意,在非常旧版本的ImageMagick -colorspace中,RGB实际上是在生成sRGB,反之亦然

例如,您的命令不做任何更改,因为JPG并不真正支持线性RGB。

输入:

enter image description here

convert logo.jpg -colorspace RGB logoRGB.jpg

enter image description here


但是PNG确实:

convert logo.jpg -colorspace RGB logoRGB.png

enter image description here

Colorspace: RGB
Gamma: 1

为了在JPG中强制转换为线性RGB,您可以执行以下操作以使像素数据成为线性。但元数据仍将显示非线性sRGB,gamma = 0.4545

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

enter image description here

Colorspace: sRGB
Gamma: 0.454545

编辑:如果想要线性RGB配置文件,以下链接可能会有用。见http://fnordware.blogspot.com/2008/05/making-linear-icc-profile.html

答案 1 :(得分:0)

您可以使用以下链接中给出的转换将sRGB转换为XYZ

Matlab Color Conversion

然后使用cv :: COLOR_XYZ2BGR或cv :: COLOR_XYZ2RGB来获取RGB。