cv.COLOR_BGR2LAB提供了错误的范围

时间:2014-11-18 10:51:23

标签: python opencv colors spyder cielab

在以下代码中,我使用png图像4096 * 4096像素,其中包括每种可能的RGB颜色(不是相同像素的两倍,可在此处找到http://allrgb.com/starry-night) 然后我将RGB值转换为LAB值,并检查每个通道的范围

import cv2 as cv
import numpy as np

im=cv.imread('allrgb.png')


im=im.astype(np.uint8)

colors_lab=cv.cvtColor(im,cv.COLOR_BGR2LAB)

m=np.amin(colors_lab[...,...,0])    

结果如下:

如果原始图像的类型为uint8,则R [0,255],G [0,255],B [0,255]给出L [0,255],A [42,226],B [20,223]

如果原始图像的类型为float32,则R [0,1],G [0,1],B [0,1]给出L [0,100],A [-86.1813,98.2351],B [-107.862, 94.4758]

在任何情况下,Lab范围都不是预期的范围,由开放式CV文档提供

任何想法如何解释?

1 个答案:

答案 0 :(得分:1)

你是对的,从OpenCV返回的LAB值永远不会超出0-100,0-255,0-255的范围。但是:LAB色彩空间的色域超出了RGB色彩空间之一,例如参见维基百科文章LAB中的第二段。

因此,当您从RGB / BGR转换为LAB时,您将永远无法获得完整的LAB范围,因为LAB包含无法用RGB表示的颜色。