在以下代码中,我使用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文档提供
任何想法如何解释?
答案 0 :(得分:1)
你是对的,从OpenCV返回的LAB值永远不会超出0-100,0-255,0-255的范围。但是:LAB色彩空间的色域超出了RGB色彩空间之一,例如参见维基百科文章LAB中的第二段。
因此,当您从RGB / BGR转换为LAB时,您将永远无法获得完整的LAB范围,因为LAB包含无法用RGB表示的颜色。