OpenCV - 检查两个图像是否 100% 相同的最快方法

新手上路,请多包涵

这里有很多问题可以检查两个图像是否“几乎”相似。

我的任务很简单。使用 OpenCV,我想知道两个图像是否 100% 相同。

它们将具有相同的大小,但可以使用不同的文件名保存。

原文由 milan m 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 683
2 个回答

您可以使用逻辑运算符,例如 xor 运算符。如果你使用的是 python 你可以使用下面的一行函数:

Python

 def is_similar(image1, image2):
    return image1.shape == image2.shape and not(np.bitwise_xor(image1,image2).any())

其中 shape 是显示矩阵大小的属性,而 bitwise_xor 顾名思义。 C++版本可以用类似的方式制作!

C++

请参阅@berak 代码。


注意: Python 代码适用于任何深度图像(1-D、2-D、3-D ……),但 C++ 版本仅适用于 2-D 图像.自己很容易将其转换为任何深度图像。我希望这能给你带来洞察力! :)

文档bitwise_xor

编辑C++ 被删除。感谢@Micka 和@berak 的评论。

原文由 Hadi 发布,翻译遵循 CC BY-SA 3.0 许可协议

差值之和应为 0(对于所有通道):

 bool equal(const Mat & a, const Mat & b)
{
    if ( (a.rows != b.rows) || (a.cols != b.cols) )
        return false;
    Scalar s = sum( a - b );
    return (s[0]==0) && (s[1]==0) && (s[2]==0);
}

原文由 berak 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题