我正在编写使用OpenCV库进行图像比较的应用程序。我正在使用基本的块匹配方法
如何提取每个块中的位数
考虑这是一张图片
16x16像素
--------------
+ +
+ +
+ +
+------------+
块大小= 8x8像素
--------------
+ | +
+------------+
+ | +
+------------+
我的节目:
1)读取两个图像
2)将它们转换为灰度级
3)将图像分成块的数量
4)比较块
5)在输出中打印相似性百分比
我的功能比较图像中块的每个像素
float imCompBMA(float **b1, float **b2, float h, float w){
float percent;
int i, j, counter=0;
for(i=0;i<h;i++){
for(j=0;j<w;j++){
// If both blocks have the same value at pixel (i,j)
//this line has to be improved
if(b1[i][j]==b2[i][j]){
counter++;
}
}
}
// Percent is the number of same pixels to the total number of pixels
percent=(float)(counter/(h*w))*100;
return percent;
}
那么如何通过比较每个块中的平均位数来改进它
提前致谢
答案 0 :(得分:0)
如果您要查找块中的所有位是相同的,那么您不可避免地必须读取每个块中的所有位!
如果您尝试比较真实图像,这可能不是最好的方法。即使两个原始图像开始相同,在大多数包中加载和保存也会使个体变小但是变化(因为它们被转换为不同的颜色空间并返回),当然,像jpeg这样的格式的节省会改变所有的位。
编辑: 如果你只想计算位数,那么得到一个指向行上像素块的int(或long或longlong)指针并计算该int中的位 - 请参阅k&r bitcounter
答案 1 :(得分:0)
如果您的目标是使用图片比较而不是“阻止匹配”,我建议您查找explanations on Opencv templateMatching。