python opencv如何检测ROI以及数字为基础

时间:2017-04-05 13:18:27

标签: python opencv

我有一张图片:

enter image description here

我想找问题编号,即:

enter image description here

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

enter image description here

但是,该地区有数字。

有人知道这种情况吗?

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:

enter image description here

但是,只有在我设置阈值< 0.45,甚至这个目标也不准确......

修改2

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

enter image description here

所以,看起来不错,但我们可以看到6号目标被遗漏。我认为目标中的数字越多,匹配就越低。

感谢。

1 个答案:

答案 0 :(得分:1)

在评论和聊天中讨论后,

实现这一目标的步骤如下:

先决条件 - 如果您不想为模板匹配实施金字塔(如果由于过度杀伤而不需要),请确保模板与模板一样大主图像中的那个。

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

步骤2 :为测量设置合适的阈值以进行正确检测。

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

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