单独保存模板匹配 OpenCV Python

Posted

技术标签:

【中文标题】单独保存模板匹配 OpenCV Python【英文标题】:Saving Template Matches Individually OpenCV Python 【发布时间】:2019-09-16 02:47:04 【问题描述】:

使用 cv2.matchTemplate 我正在使用参考图像 (stampRef.jpg) 并在更大的图像 (stamps) 中查找多个匹配项。我想将每个找到的匹配项保存为他们自己的图像。旋转对我来说很重要,但不是规模。我担心由于重叠匹配,它可能会多次保存同一张图像。我不想要这个。我只想要每个独特匹配的 1 张图片。我只是不确定如何首先保存它们。任何帮助都会很棒,谢谢。

*更新,我找到了一种方法来通过使用掩码减少找到的重叠匹配的数量,所以现在我需要单独保存这些匹配。我已经更新了代码。

import cv2
import numpy as np

img = cv2.imread("stamps.jpg")
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
template = cv2.imread('stampRef.jpg',0)
w, h = template.shape[::-1]
res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where( res >= threshold)

#Counts the number of found matches, which are currently overlapping
number = np.sum(res >= threshold)
print(number)

count = 0
mask = np.zeros(img.shape[:2], np.uint8)
for pt in zip(*loc[::-1]):
    if mask[pt[1] + h//2, pt[0] + w//2] != 255:
        mask[pt[1]:pt[1]+h, pt[0]:pt[0]+w] = 255
        count += 1
        cv2.rectangle(img, pt, (pt[0] + w, pt[1] + h), (0,255,0), 3)

print ("Number of found matches:", count)
small = cv2.resize(img, (0,0), fx=0.3, fy=0.3)

cv2.imshow('Matches',small)
cv2.waitKey(0) & 0xFF== ord('q')
cv2.destroyAllWindows()

【问题讨论】:

【参考方案1】:

此答案解释了如何将每个匹配项保存为单独的图像。您已经通过找到匹配的坐标完成了艰苦的工作。您可以使用这些坐标裁剪匹配并将其保存为 .png:

roi = img[pt[1]:pt[1]+h, pt[0]:pt[0]+w]
cv2.imwrite(+ str(count) + '.png', roi)

这段代码应该进入遍历匹配的循环中:

count = 0

mask = np.zeros(img.shape[:2], np.uint8)
for pt in zip(*loc[::-1]):
    if mask[pt[1] + h//2, pt[0] + w//2] != 255:
        mask[pt[1]:pt[1]+h, pt[0]:pt[0]+w] = 255
        count += 1
        cv2.rectangle(img, pt, (pt[0] + w, pt[1] + h), (0,255,0), 3)
        roi = img[pt[1]:pt[1]+h, pt[0]:pt[0]+w]
        cv2.imwrite(+ str(count) + '.png', roi)
        cv2.imshow('roi', roi)
        cv2.waitKey()

【讨论】:

以上是关于单独保存模板匹配 OpenCV Python的主要内容,如果未能解决你的问题,请参考以下文章

opencv python:模板匹配

实时模板匹配 - OpenCV、C++

Python+OpenCV图像处理—— 模板匹配

Python+OpenCV图像处理—— 模板匹配

使用Python+OpenCV进行图像模板匹配(Match Template)

Python+OpenCV图像处理之模板匹配