【问题标题】:how python opencv detect ROI together with number arroundedpython opencv如何检测ROI和包围数字
【发布时间】:2017-04-06 22:34:29
【问题描述】:

我这里有一张图片:

我想找到问题编号,即:

所以,一般来说,对于正常的形状,我可以为这个家伙使用形状检测或模板匹配:

但是,区域内有数字。

有人知道这种情况吗?

Opencv:3.2.0

Python:2.7.10

编辑 1

这是模板匹配的代码:

#!/usr/bin/env python
import cv2
import numpy as np

img_rgb = cv2.imread('papere1.jpg')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)

template = cv2.imread('no.png',0)
#template = cv2.imread('2.jpg',0)
#template = cv2.imread('papere3.jpg',0)
#cv2.imshow('origin',img_rgb)
#cv2.waitKey(0)
w, h = template.shape[::-1]
res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)

threshold = 0.4

loc = np.where( res >= threshold)
print loc
for pt in zip(*loc[::-1]):

    cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)

cv2.imshow('Detected',img_rgb)
cv2.waitKey(0)

这是模板png:

但是,目标只有在我设置阈值

编辑 2

上面的代码将阈值设置为 0.6,我得到了这个:

所以,看起来不错,但我们可以看到 6 的目标被错过了。而且我认为目标内的数字越多,匹配度就越低。

谢谢。

【问题讨论】:

  • 您尝试过模板匹配吗?我认为即使形状中有数字,相关性仍然很高。
  • 您好,请参阅我上面的编辑 1,相关性较差且不准确。
  • 嗯,现在编辑更好。如果您知道所有图像的目的地总是在图像的左侧 15%,我建议您裁剪它,并为图像/模板的至少 10 个金字塔运行模板匹配并检查它们。这是一种肮脏的方法,但它可能有效。
  • 我看到了您发布的链接,但似乎不是我想要的。它与比例匹配更相关。实际上,我的情况是模板尺寸与原始图像中的目标几乎相同。但是该链接很有用,因为我们稍后可能会遇到问题:-)

标签: python opencv


【解决方案1】:

在 cmets 和聊天中讨论之后,

实现这一点的步骤如下:

先决条件 - 如果您不想为模板匹配实现金字塔(如果由于过度杀伤而不需要),请确保模板与主图。

第 1 步:运行 cv2.matchTemplate 并使用适当的相关性度量。

第 2 步:为正确检测的度量设置适当的阈值。

第 3 步:OP 提到了具有数字的正方形,因此来自 here 的数字识别并将轮廓的像素设置为黑色,然后运行 ​​cv2.matchTemplate 应该也可以。

PS。 OP提到在检测到正方形后进行数字识别,所以这种也解决了另一个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-31
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多