OpenCV是否具有处理sRGB色彩空间中的非线性的功能?

Yin*_*ong 7 opencv colors image-processing computer-vision

我想知道OpenCV是否具有处理sRGB色彩空间中的非线性的功能.

假设我想将JPEG图像从sRGB颜色空间转换为XYZ颜色空间.如本Wiki页面所述,需要首先撤消非线性以转换为线性RGB空间,然后与3x3颜色转换矩阵相乘.但是,我在cvtColor文档中找不到任何此类讨论.我错过了什么?

非常感谢提前!

bea*_*ker 5

文档中没有明确说明,因此您不会错过任何内容,但 OpenCV在其颜色转换中不会执行伽玛校正RGB2XYZ/BGR2XYZ。您可以通过查看cvtColorin的源代码来确认这一点

<OpenCV_dir>/modules/imgproc/src/color.cpp

如果您查看该RGB <-> XYZ部分,您会发现输入 RGB 值只是乘以系数矩阵。

我还没有找到任何现有的方法来对 RGB 图像执行伽玛校正。

有趣的是,自定义转换是作为转换为和RGB -> XYZ的初步步骤完成的,并且在这两种情况下都会执行伽玛校正。L*a*b*L*u*v*

不幸的是,这无法从RGB2XYZ代码中访问,但您也许可以在自己的代码中重用它。我还在网上看到了几个代码示例,主要使用深度图像的查找表CV_8U

  • 现在,还有另一个问题:如何知道图像(由 cv::imread(...) 函数读取)是 sRGB、Adobe RGB 还是线性 RGB 等?我很困惑。 (2认同)
  • 我发现了一些有趣的事情,在OpenCV提供的“color.cpp”代码中,有一个名为initLabTabs(...)的方法,其中执行了伽玛编码和解码。该方法总是在RGB2Lab、RGB2Luv和reverse之前使用。而且,为了将RGB转换到LAB颜色空间,首先需要转换到XYZ空间(注意:这个转换是一个线性过程,即矩阵乘法,因此RGB值需要在线性空间或线性RGB中)。我相信它会从 sRGB 转换为线性 RGB,然后使用线性 RGB 值转换为 XYZ 颜色空间。 (2认同)