【发布时间】:2020-05-12 08:28:15
【问题描述】:
所以我正在使用 opencv 进行模板匹配,如下所示。我经常需要摆弄#THRESHOLD 的视觉相似性,因为它有时无法发现匹配项,或者它返回的匹配项太多。这是一个反复试验,直到它与文档中某个位置的 1 个元素完全匹配。我想知道是否有任何方法可以以某种方式自动执行此操作。
image.png 文件是 pdf 文档的图片。 template.png 文件是段落的图片。我的目标是发现 pdf 文档中的所有段落,我想知道这里有什么神经网络有用。
import cv2
import numpy as np
img = cv2.imread("image.png");
gimg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
template = cv2.imread("template.png", cv2.IMREAD_GRAYSCALE);
w, h = template.shape[::-1]
result = cv2.matchTemplate(gimg, template, cv2.TM_CCOEFF_NORMED)
loc = np.where(result >= 0.36) #THRESHOLD
print(loc)
for pt in zip(*loc[::-1]):
cv2.rectangle(img, pt, (pt[0] + w, pt[1] + h), (0,255,0), 3)
cv2.imwrite("output.png", img)
例如,它将搜索从0 到1.0 的每个#THRESHOLD 值,并返回一个阈值,该阈值会返回图像中的单个矩形匹配项(在上方绘制绿色框)。
但是,我不禁觉得这很笼统,或者有没有更聪明的方法来找出阈值是多少?
【问题讨论】:
-
如果你只是想提取所有段落,每个段落都是分开的,那么也许使用形态学内核将文本混合成黑色矩形的行或段落,然后使用轮廓来查找每个段落。搜索这个论坛,因为我以前看到过这样的例子。
-
您的模板是从原始图像中提取的吗?请同时发布图片和模板,以便我们更好地帮助您
-
您可以使用 minmaxloc 来获取最小值/最大值(最佳找到的位置)。而如果还需要多次检测,就根据最小值/最大值选择一个阈值?!!
-
您可以将您的
image.png和template.png文件添加到帖子中吗?如果您尝试检测 pdf 文档中的段落,我不认为模板匹配是要走的路。我建议使用与@fmw42 相同的想法。看看how to detect paragraphs in a text document image for a non-consistent text structure in Python和Detect text region
标签: python opencv template-matching