我正在使用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的范围内有值。那么我究竟能得到那些像素值
提前致谢!!
答案 0 :(得分:2)
当然,你可以这样做,为什么不呢?但请注意,输出有些具体(因为a
和b
可能是否定的):
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,你怎么能得到负数?