访问CIE L * a * b *颜色空间中的像素信息

时间:2012-06-15 02:09:53

标签: c image-processing opencv rgb

我正在使用OpenCV来处理一些与图像处理相关的代码。我陷入了困境。

在特定代码中,我需要根据它的CIE L * a * b *值来比较图像的像素值。我知道BGR我们可以这样做:

// img is the image, suppose
uchar *data = ( uchar* )img->imageData;

for(i=0; i< img->height; i++)
    for(j=0; j<img->width; j++)
     {
         b = data[i*img->widthStep + j*img->nChannels + 0];
         g = data[i*img->widthStep + j*img->nChannels + 1];
         r = data[i*img->widthStep + j*img->nChannels + 2]; 
     }

我的问题是,我们可以为l * a * b *颜色模型做类似的事吗?我的意思是起初我通过

转换图像
cvCvtColor(img, lab, CV_BGR2Lab);

然后访问单个频道信息,如上例所示(因为L * a * b *也是由3个频道组成,如果没有错),我们可以得到像素值吗?

我问这个的原因是我试图实现它,但是我得到了一些非常高的负数的奇怪值(我使用int数据类型而不是uchar,因为我不确定范围&#39; a& #39;和&#39; b&#39;可以有)而在维基百科我看到了&#39; L&#39;可以只在0到100的范围内有值。那么我究竟能得到那些像素值

提前致谢!!

1 个答案:

答案 0 :(得分:2)

当然,你可以这样做,为什么不呢?但请注意,输出有些具体(因为ab可能是否定的):

On output 0≤L≤100, -127≤a≤127, -127≤b≤127
The values are then converted to the destination data type:
    8-bit images:
        L <- L*255/100, a <- a + 128, b <- b + 128

请注意,L也会缩放到0-255范围(而不是0-100)。查看更多here

顺便说一句,如果你的数据类型是 unsigned char,你怎么能得到负数?