这里有很多问题可以检查两个图像是否“几乎”相似。
我的任务很简单。使用 OpenCV,我想确定两个图像是否 100% 相同。
它们的大小相同,但可以使用不同的文件名保存。
您可以使用像xor运算符这样的逻辑运算符。如果您正在使用python,则可以使用以下单行功能:
Python
def is_similar(image1, image2):
return image1.shape == image2.shape and not(np.bitwise_xor(image1,image2).any())
Run Code Online (Sandbox Code Playgroud)
whereshape是显示矩阵大小的属性,bitwise_xor顾名思义。C++ 版本可以用类似的方式制作!
C++
请参阅@berak 代码。
注意:该Python代码适用于任何深度图像(1-D、2-D、3-D、..),但该C++版本仅适用于 2-D 图像。自己将其转换为任何深度图像很容易。我希望这能给你洞察力!:)
文档:bitwise_xor
编辑:C++已删除。感谢@Micka 和@berak 的评论。
差异的总和应为 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);
}
Run Code Online (Sandbox Code Playgroud)
小智 7
import cv2
import numpy as np
a = cv2.imread("picture1.png")
b = cv2.imread("picture2.png")
difference = cv2.subtract(a, b)
result = not np.any(difference)
if result is True:
print("Pictures are the same")
else:
print("Pictures are different")
Run Code Online (Sandbox Code Playgroud)