我在这里有一幅图像:

我想找出问题号,即:

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

然而,在该区域内有数目。
有人知道这种情况吗?
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模板:

但是,只有当我设定阈值< 0.45时,目标才会出现,甚至这个目标也不准确。
编辑2
当上面的代码设置为0.6时,我得到了以下内容:

所以,看起来不错,但我们可以看到目标与6是错的。我认为目标内的数字越多,匹配越低。
谢谢。
发布于 2017-04-06 14:34:29
在评论和聊天中进行讨论之后,
实现这一目标的步骤如下:
前提条件--如果你不想为模板匹配实现金字塔(如果它不是因为过度杀戮而需要的),确保模板和主图像中的模板一样大。
步骤1:使用适当的相关度量运行cv2.matchTemplate。
步骤2:为正确检测设置适当的阈值。
步骤3:OP提到有数字的方块,因此从这里中识别数字,将轮廓的像素设置为黑色,然后运行cv2.matchTemplate也可以。
PS。OP提出在对方格进行检测后进行数字识别,这样也解决了其他问题。
https://stackoverflow.com/questions/43232424
复制相似问题