繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM