Opencv 图像像素的匹配强度

Opencv 图像像素的匹配强度,opencv,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; 类似地,其他图像的强度为1,蓝色为1,…,并比较两个图像的“col”。但它没有提供正确的输出无法根据像素值匹配两个像素,此代码是

我想根据像素值决定两幅图像是否匹配

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;

类似地,其他图像的强度为1,蓝色为1,…,并比较两个图像的“col”。但它没有提供正确的输出无法根据像素值匹配两个像素,此代码是否正确计算强度???

因为您的像素值是无符号字符形式,并且您知道无法添加字符…所以请键入int中的cast像素值,然后添加

举个例子:你见过这样的总和='a'+'b'+'c';这有什么意义吗?通过添加三个uchar值,您也可以执行相同的操作

因此,请尝试执行以下操作:

int col = (int)red + (int)green + (int)blue;
对要匹配的像素执行相同的操作

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

步骤1:将图像转换为HSV CVT颜色SRC、dst、CV_RGB2HSV

第二步:然后计算色调值。别忘了对给定像素进行上述类型转换

步骤3:对要比较的另一个像素执行相同的操作。

最好使用彩色视频的伽马压缩R'G'B'分量的加权和作为强度,以便更好地匹配:

intensity = 0.2126 R + 0.7152 G + 0.0722 B

您可能还对以下内容感兴趣。

它如何不提供正确的输出?我的代码读取两个图像Mat image=imreadb.bmp;Mat templat=imreada.bmp;两种情况下的输出相同,即i。当我在图像和模板中加载相同的图像时,以及当我在图像和模板中加载不同的图像时。为什么要将R、G和B乘以一些常数?@skm查看我提供的链接。它是为伽马压缩而设计的。