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);
而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);
此时 I_lab2和I_lab3的值是一致的,I_lab1和opencv得到的lab颜色空间的值是一致的。
参考: