2014-02-21 59 views
0

的像素的强度我想作出最后决定两个图像是否像素的基础上匹配value.Here是我的代码的一部分匹配图像

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; 

同样intensity1,蓝天,... 。对于其他图像并比较两个图像的“col”。但它没有给出正确的输出(无法根据像素值匹配两个像素),该代码是否正确计算强度?

+0

它如何“不给予正确的输出”? – herohuyongtao

+0

我的代码读取两个图像Mat image = imread(“b.bmp”); Mat templat = imread(“a.bmp”); (i)的条件下输出相同。当我在“图像”和“模板”中加载相同的图像时,以及(ii)当我在“图像”和“模板”中加载不同的图像时。 – user3278011

回答

0

因为你的像素值在unsigned char窗体中,并且你知道char不能被添加...所以请在int中输入像素值,然后添加。

举例:你见过这样的东西吗sum = 'a' + 'b' + 'c';它有什么意义吗?并且通过添加三个uchar值来完成相同的操作。

所以,尽量做到以下几点:

int col = (int)red + (int)green + (int)blue; 

的是要匹配的像素也这样做。

但我建议你通过比较它们的hue值来比较像素,这对你来说更容易理解。

step-1:将图像转换为HSV cvtColor(src,dst,CV_RGB2HSV);

2步:然后计算hue淡水河谷(不要忘了做类型转换如上所述)为给定的像素

步3:做你希望将其他像素同样的事情比较。

0

这是更好地使用luma(这是伽马压缩R'G'B”彩色视频分量的加权和)的强度更好的匹配:

intensity = 0.2126 R + 0.7152 G + 0.0722 B 

您还可能有兴趣Converting RGB to grayscale/intensity

+0

你为什么用一些常数乘以'R,G&B'? – skm

+0

@skm查看我给的链接。它专为伽玛压缩而设计。 – herohuyongtao