我想根据像素值判断两个图像是否匹配。这是我代码的一部分
Vec3b intensity = image.at<Vec3b>(j, i);
uchar blue = intensity.val[0];
uchar green = intensity.val[1];
uchar red = intensity.val[2];
uchar col=blue+green+red;
类似的strength1,blue1,....用于其他图像并比较两个图像的'col'。但它没有给出正确的输出(无法根据像素值匹配两个像素),这段代码是否正确计算强度?
答案 0 :(得分:0)
因为您的像素值为unsigned char
形式,并且您知道无法添加char
...因此请在int
中输入像素值,然后添加。
一个例子:你见过这样的事情sum = 'a' + 'b' + 'c';
这有什么意义吗?而且你通过添加三个uchar
值来做同样的事情。
因此,请尝试执行以下操作:
int col = (int)red + (int)green + (int)blue;
对要匹配的像素执行相同的操作。
但我建议您通过比较hue
值来比较像素,这对您来说更容易理解。
步骤1:将图像转换为HSV cvtColor(src,dst,CV_RGB2HSV);
步骤2:然后计算给定像素的hue
(不要忘记对上面提到的类型转换)的值
步骤3:对您想要比较的另一个像素执行相同的操作。
答案 1 :(得分:0)
最好使用luma(彩色视频的伽马压缩R'G'B'分量的加权和)作为更好匹配的强度:
intensity = 0.2126 R + 0.7152 G + 0.0722 B