使用OpenCV/cv2比较并标记两张图片之间的差异 (含图片)

9
我想使用Python和cv2来比较两张图片,就像下面这样。
(Python 2.7 + Windows)
c:\Original.jpg c:\Original.jpg c:\Edited.jpg Edited.jpg 很简单,我可以做到以下操作并保存一张显示差异的图片:
import cv2 

Original = cv2.imread("c:\\Original.jpg")
Edited = cv2.imread("c:\\Edited.jpg")

diff = cv2.subtract(Original, Edited)

cv2.imwrite("c:\\diff.jpg", diff)

结果如下:

结果就像这样:

c:\diff.jpg

c:\diff.jpg

此外,我希望根据比较的文件在图片中显示差异。换句话说,我希望基于“Edited.jpg”在图片上画出差异的圆圈或标记。是否可能?

(想到一种方法可能是识别“diff.jpg”中的可见区域,然后在“Edited.jpg”中为该区域绘制一个圆圈?)


4
使用差分图像中的findContours函数。然后对于每个轮廓使用minEnclosingCircle函数,并在目标图像上绘制这些圆。 - Micka
@Micka,这太棒了! - Mark K
1个回答

13

感谢Micka的帮助。下面添加的代码可正常工作。

im = cv2.imread('c:\\diff.jpg')
im1 = cv2.imread('c:\\Edited.jpg')


imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

cv2.drawContours(im1, contours, -1, (0,255,0), 1)
cv2.imwrite("c:\\see_this.jpg", im1)

c:\see_this.jpg

c:\see_this.jpg


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接