【问题标题】:C++ image comparison average number of bits in each blockC++图像比较每个块中的平均位数
【发布时间】:2012-12-03 18:39:58
【问题描述】:

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

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

提前致谢

【问题讨论】:

  • 每个块的平均位数是什么意思?每个块中的每个像素都有相同的位数。

标签: c++ c algorithm opencv


【解决方案1】:

如果您的目标是通过 图像比较 而不是“块匹配”,我建议您查找 explanations on Opencv templateMatching

【讨论】:

    【解决方案2】:

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

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

    编辑: 如果您只想计算位,则获取一个指向一行像素块的 int(或 long 或 longlong)指针并计算该 int 中的位 - 请参阅k&r bitcounter

    【讨论】:

    • 感谢您的回复,我不是在寻找相同的位,我想在每个块中取平均位数,比较它们并输出原始图像和测试图像之间的差异
    猜你喜欢
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    相关资源
    最近更新 更多