匹配图像像素的强度

时间:2014-02-21 19:38:44

标签: opencv

我想根据像素值判断两个图像是否匹配。这是我代码的一部分

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'。但它没有给出正确的输出(无法根据像素值匹配两个像素),这段代码是否正确计算强度?

2 个答案:

答案 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

您可能也对Converting RGB to grayscale/intensity感兴趣。