gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:38:18 25 4
gpt4 key购买 nike

我将 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);

然后像上面的例子一样访问各个 channel 信息(因为 L*a*b* 也由 3 个 channel 组成,如果没记错的话),我们可以得到像素值吗??

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

提前致谢!!

最佳答案

当然,你可以做到,为什么不呢?但是请注意,输出有些特定(因为 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,你怎么能得到负数?

关于c - 访问 CIE L* a*b* 颜色空间中的像素信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11043815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com