【问题标题】:how to convert an image from BGR to LAB with opencv 2.4 python 2.7 and numpy如何使用 opencv 2.4 python 2.7 和 numpy 将图像从 BGR 转换为 LAB
【发布时间】:2012-11-17 16:28:32
【问题描述】:

我正在使用 opencv 2.4 和 numpy。我想打开一个图像并获取有关它的所有信息(8 位 - 如果它的 RGB-BGR 等),并尝试更改色彩空间。 我有这个代码:

if __name__ == '__main__':
    img =  cv2.imread('imL.png') 
    conv= cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
        cv2.imwrite('lab.png', conv )

当我打开文件lab.png 时,我得到了不同颜色的图像! 我检查了 BGR 到 LAB 的值:http://www.brucelindbloom.com/

为此,我想知道一张图片的所有信息。

【问题讨论】:

    标签: image-processing opencv numpy python-2.7


    【解决方案1】:

    您将获得不同的图像颜色,因为 imwrite() 以指定的格式(PNG、JPEG 2000 和 TIFF)单通道或 3 通道(使用“BGR”通道顺序)保存文件。可以使用此功能保存图像。 imwrite() 不知道 LAB 保存图像的格式,因为它总是期望 BGR 中的图像。 如果格式、深度或通道顺序不同,请在保存前使用 Mat::convertTo() 和 cvtColor() 进行转换。

    【讨论】:

    • 谢谢!我在猜测,我也尝试过使用 PIL 库,但看起来它也不支持 LAB。但 MAT::convertTo() 看起来也仅适用于 c++ 我没有找到任何使用 python 的示例。我说的对吗?
    • 您可以查看 Python 等效的 MAT::convertTo() cv.Convert(src, dst)。它将一个数组复制到另一个具有可选缩放,首先执行,和/或可选类型转换,然后执行。如果您希望更改 8U 图像浮动或反之,则很有用。
    • 恐怕用 opencv 2.4 是不可能的,因为你可以看到你写了 cv.Convert(src, dst)。另外谷歌搜索我没有在文档中找到。 docs.opencv.org/modules/core/doc/basic_structures.html#void Mat::convertTo(OutputArray m, int rtype, double alpha, double beta) const 感谢您的回答!
    【解决方案2】:

    Lab 是另一个颜色空间,就像从 cv2.imread() 获得的 BGR 颜色空间。就像您将温度从华氏温度转换为摄氏温度一样。 32华氏度和0摄氏度是相同的温度,但单位不同。

    cv2.imwrite() 不知道这些值是否在 BGR 颜色空间中。当它得到一个 3 维数组时,它假定它是 BGR 颜色空间,而您的 conv 变量包含 Lab 颜色空间。这就是您的图像颜色发生变化的原因。

    供您参考,BGR 颜色空间的每一层都包含蓝色、绿色和红色,而 Lab 层分别包含亮度 (0-100)、a* 和 b*。有关详细信息,请参阅 Wikipedia 中的“Lab 颜色空间”。

    【讨论】:

    • 我知道实验室颜色是什么。我担心的是值的匹配不正确。我在这个网站上检查了 BGR 对 LAB 的值:brucelindbloom.com 他们是不同的!顺便说一句,我发现您将图像保存为 float32,然后将值转换为 LAB,所以我认为问题在于一开始图像保存在 uint8
    猜你喜欢
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2017-07-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2018-08-15
    相关资源
    最近更新 更多