【发布时间】:2020-07-23 06:34:59
【问题描述】:
我是 OpenCV 的新手,我想找到一种解决方案,在某个图像上找到多个带有文本的图像。将来我需要那些物品来获得认可。
首先,我有一帧图像用于搜索模板。它看起来像带有透明中心的框架。 我尝试了很多样本来匹配模板,但它们只给出一个搜索结果:只找到第一个或第二个项目,但我需要所有这些。
请帮助我找到解决问题的方法。
框架模板:
场景:
代码:
import cv2
import numpy as np
method = cv2.TM_CCOEFF_NORMED
threshold = 0.90
img_main = cv2.imread('images/garden.jpg')
template = cv2.imread('images/frame_trans.png', cv2.IMREAD_GRAYSCALE)
template_gray = template
img_main_gray = cv2.cvtColor(img_main, cv2.COLOR_BGR2GRAY)
w, h = template.shape[::-1]
res = cv2.matchTemplate(img_main_gray, template_gray, method)
cv2.normalize(res, res, 0., 1., cv2.NORM_MINMAX)
cv2.threshold(res, threshold, 1, cv2.THRESH_TOZERO)
i = 0
while i < 100:
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:
top_left = min_loc
else:
top_left = max_loc
if max_val > threshold:
print(top_left)
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img_main, top_left, bottom_right, (0, 0, 255), 2)
cv2.floodFill(img_main_gray, None, top_left, 0, 0.1, 1.0)
else:
break
i += 1
cv2.imwrite('sample6_output.png', img_main)
cv2.imshow('sample6', img_main)
cv2.waitKey()
脚本的结果在这里...
PyDev console: starting.
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
runfile('D:/MyProjects/PyHeroRecognition/sample6.py', wdir='D:/MyProjects/PyHeroRecognition')
(71, 45)
(71, 45)
(71, 45)
(71, 45)
(71, 45)
(71, 45)
(71, 45)
(71, 45)
(71, 45)
(71, 45)
结果图片:
【问题讨论】:
-
我看过这个例子,但它也没有帮助我。它匹配填充的模板,并且它们按照描述的方式工作。但我不能将透明框架作为模板运行。
-
你可以用蒙版做透明度。请参阅 matchTemplate 文档。
-
是的,我想这是一个很好的解决方案,你能给我看看这个想法的样本吗?如何创建面具?我在 matchTemplate 中找不到如何使用掩码。文档没有真正的信息,只是对参数的描述。
-
蒙版只是您的模板 Alpha 通道。分离 RGB 图像和 alpha 通道。与RGB通道图像做模板匹配,并使用分离的alpha通道作为掩码。