RGB转到LAB颜色空间,matlab和opencv内嵌函数使用的区别

opencv中采用的是

cvCvtColor(image, lab_image, CV_BGR2LAB)

其中lab_image三通道L,a,b的值都是大于100的值,并不是在规定范围内(L: [0, 100], a: [-128, 127], b: [-128, 127]) 

对应Matlab中的,相同的情况可以采用

cform = makecform('srgb2lab', 'AdaptedWhitePoint', whitepoint('D65'));
I_lab1 = applycform(srcImg, cform);

RGB转到LAB颜色空间,matlab和opencv内嵌函数使用的区别_第1张图片

而Matlab的另一个内嵌函数rgb2lab()得到的颜色空间是严格在Lab颜色空间的规定范围内

I_lab2 = rgb2lab(srcImg);


这两者之间的转换可以通过判断原图像是否是uint8类型的数值,转换为double类型后除以255就能转换到标准范围内。

cform = makecform('srgb2lab'); 
if strcmp(class(srcImg), 'uint8')
    srcImg2 = double(srcImg)/255;
end
I_lab3 = applycform(srcImg2, cform);


RGB转到LAB颜色空间,matlab和opencv内嵌函数使用的区别_第2张图片


此时 I_lab2和I_lab3的值是一致的,I_lab1和opencv得到的lab颜色空间的值是一致的。


参考:

http://www.codeforge.com/read/217017/rgb2lab.m__html




你可能感兴趣的:(OpenCV,Matlab)