import cv2
method = cv2.TM_SQDIFF_NORMED
# Read the images from the file
small_image = cv2.imread('small_image.png')
large_image = cv2.imread('large_image.jpeg')
result = cv2.matchTemplate(small_image, large_image, method)
# We want the minimum squared difference
mn,_,mnLoc,_ = cv2.minMaxLoc(result)
# Draw the rectangle:
# Extract the coordinates of our best match
MPx,MPy = mnLoc
# Step 2: Get the size of the template. This is the same size as the match.
trows,tcols = small_image.shape[:2]
# Step 3: Draw the rectangle on large_image
cv2.rectangle(large_image, (MPx,MPy),(MPx+tcols,MPy+trows),(0,0,255),2)
# Display the original image with the rectangle around the match.
cv2.imshow('output',large_image)
# The image is only displayed if we call this
cv2.waitKey(0)
4条答案
按热度按时间x0fgdtte1#
由于Moshe's answer只涉及匹配在给定图片中只包含一次的模板。下面是一次匹配多个模板的方法:
(Note:我修改并修复了原始代码中的一些 “错误”)
结果:
**来源:**https:opencv24-python-tutorials.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_template_matching/py_template_matching.html#template-matching-with-multiple-objects
n53p2ov02#
对于任何在未来偶然发现这个的人。
这可以通过模板匹配来完成。总结一下(我的理解),模板匹配寻找一张图像在另一张图像中的精确匹配。
下面是一个如何在Python中实现的例子:
xtupzzrd3#
OpenCV有一个Python接口,你可以看看。如果字符,不要改变太多,你可以尝试使用matchTemplate函数。
这是他们的官方教程(本教程是使用C++接口编写的,但您应该能够从中了解如何在Python中使用该函数)。
zbdgwd5y4#
重要提示:matchTemplate甚至能够检测调整大小和旋转的模板。下面是代码和输出。
图片:picture模板:penguin结果:detected
详细说明在这里(我的博客):simple-ai.net/find-and-replace-in-image