首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python如何检测ROI和数字排列

python如何检测ROI和数字排列
EN

Stack Overflow用户
提问于 2017-04-05 13:18:26
回答 1查看 641关注 0票数 1

我在这里有一幅图像:

我想找出问题号,即:

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

然而,在该区域内有数目。

有人知道这种情况吗?

Opencv: 3.2.0

Python: 2.7.10

编辑1

下面是模板匹配的代码:

代码语言:javascript
复制
#!/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是错的。我认为目标内的数字越多,匹配越低。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-06 14:34:29

在评论和聊天中进行讨论之后,

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

前提条件--如果你不想为模板匹配实现金字塔(如果它不是因为过度杀戮而需要的),确保模板和主图像中的模板一样大。

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

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

步骤3:OP提到有数字的方块,因此从这里中识别数字,将轮廓的像素设置为黑色,然后运行cv2.matchTemplate也可以。

PS。OP提出在对方格进行检测后进行数字识别,这样也解决了其他问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43232424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档