[英]C++ image comparison average number of bits in each block
我正在使用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;
}
那么如何通过比较每个块的平均位数来改善它
提前致谢
如果您要查找一个块中的所有位都相同,那么不可避免地必须读取每个块中的所有位!
如果您要比较真实图像,这可能不是最佳方法。 即使两个原始图像开始时相同,大多数程序包中的加载和保存也将使它们个体化,但会有所变化(因为它们被转换为不同的色彩空间并返回),当然,保存为jpeg之类的格式也会更改所有位。
编辑:如果您只想计算位数,则获取一个int(或long或longlong)指针指向一行像素并计算该int中的位数-请参阅k&r bitcounter
如果您的目标是要做图像比较而不是“块匹配”,我建议您参考Opencv templateMatching的说明 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.