如何验证两个图像完全相同?

新手上路,请多包涵

我正在编写一个 opencv 程序,我在其中使用 USB 摄像头跟踪对象的位置。为了确保我使用的相机获得尽可能高的帧速率,我制作了一个线程进程来从相机读取图像。图像处理在另一个循环中完成,该循环还将对象位置写入文件。

现在我想要一种方法来避免多次处理同一帧。所以我想我可以将刚刚处理的图像与视频流线程中可用的图像进行比较。

首先,我尝试使用 if frame1 == frame2,但收到错误消息“具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()”。经过一番谷歌搜索后,我找到了 cv2.compare 和标志 CMP_EQ。制作了一个示例代码,并使其以某种方式工作。但是,我的问题是。如何以更简单或更好的方式做到这一点?

 import cv2

cv2.namedWindow('image1', cv2.WINDOW_NORMAL)
cv2.namedWindow('image2', cv2.WINDOW_NORMAL)

frame1 = cv2.imread("sample1.png")
frame2 = frame1
frame3 = cv2.imread("sample2.png")

compare1 = cv2.compare(frame1,frame2,0)
compare2 = cv2.compare(frame1,frame3,0)

cv2.imshow('image1', compare1)
cv2.imshow('image2', compare2)

if compare1.all():
    print "equal"
else:
    print "not equal"

if compare2.all():
    print "equal"
else:
    print "not equal"

cv2.waitKey(0)
cv2.destroyAllWindows()

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

阅读 599
2 个回答

给你的图片一个索引怎么样?

伪代码:

 class Frame
{
   cvImage img;
   uint    idx;
}

而不是简单地检查当前索引是否大于您处理的最后一个索引。它比任何基于图像处理的方法都简单而且绝对更快。

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

open("image1.jpg","rb").read() == open("image2.jpg","rb").read()

应该告诉你它们是否完全相同……

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

推荐问题