C++图像比较每个块中的平均位数

C++ image comparison average number of bits in each block

本文关键字:图像 比较 C++      更新时间:2023-10-16

我正在使用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;
}

那么我如何通过比较每个块中的平均位数来改进它

提前致谢

如果您的目标必须与图像比较而不是"块匹配"做一些事情,我建议您在 Opencv 模板匹配上查找解释。

如果你正在寻找一个块中的所有位是相同的,那么你不可避免地必须读取每个块中的所有位!

如果您尝试比较真实图像,这可能不是最佳方法。即使两个原始图像开始时相同,在大多数包中加载和保存也会进行小的单独但更改(因为它们被转换为不同的颜色空间并返回),当然,像 jpeg 这样的格式的节省会改变所有位。

编辑:如果你试图只计算位,那么获取一个指向行上像素块的整数(或长或长)指针,并计算该整数中的位数 - 参见K&R Bit计数器