2014-11-18 9 views
1

в следующем коде, я использую PNG-изображение 4096 * 4096 пикселей, которое включает в себя все возможные цвета RGB (не в два раза один и тот же пиксель, можно найти здесь http://allrgb.com/starry-night) Затем я конвертирую значения RGB в значения LAB и проверить диапазон каждого из каналовcv.COLOR_BGR2LAB дает неправильный диапазон

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 [0255], 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

Вы правы, значения LAB, возвращаемые из OpenCV, никогда не будут находиться за пределами диапазона 0-100, 0-255, 0-255. Но: диапазон цветового пространства LAB превышает один из цветовых пространств RGB, см., Например, второй абзац в статье wikipedia по адресу LAB.

Таким образом, при преобразовании из RGB/BGR в LAB вы никогда не получите полный диапазон LAB, поскольку LAB содержит цвета, которые не могут быть представлены в RGB.

Смежные вопросы