我正在尝试使用http://iamabhik.wordpress.com/category/opencv/中的想法实现车牌识别软件.
我使用"import cv2"在python中使用opencv实现了板位置.它工作正常,现在我需要将板块区域复制到另一个图像来进行字符的分割,然后是OCR部分(可能使用神经网络).
我发现GetSubRect()函数可以复制或隔离部分图像,但它似乎在python中不可用.还有其他选择吗?ROI功能似乎也没有实现.
是否有关于opencv的python接口的最新文档?
我在Debian wheezy/sid环境中从svn存储库(版本7239)编译了opencv.
免费提出替代方法/想法来解决这个问题.
提前致谢.
Abi*_*n K 53
cv.GetSubRect和ROI函数都可以在Python中使用,但在旧import cv模式或import cv2.cv.即使用cv2.cv.GetSubRect()或cv2.cv.SetImageROI如果你比较熟悉它们.
另一方面,由于新cv2中的numpy集成,因此在没有这些功能的情况下设置ROI很简单.
如果(x1,y1)和(x2,y2)是你获得的板的两个相对顶点,那么只需使用函数:
roi = gray[y1:y2, x1:x2]
Run Code Online (Sandbox Code Playgroud)
那是你的形象投资回报率.
所以选择适合自己的东西.
nat*_*ncy 18
这是从图像中裁剪 ROI 的可视化
-------------------------------------------
| |
| (x1, y1) |
| ------------------------ |
| | | |
| | | |
| | ROI | |
| | | |
| | | |
| | | |
| ------------------------ |
| (x2, y2) |
| |
| |
| |
-------------------------------------------
Run Code Online (Sandbox Code Playgroud)
考虑(0,0)为图像的左上角,从左到右为 x 方向,从上到下为 y 方向。如果我们有一个 ROI(x1,y1)的左上角和(x2,y2)右下角的顶点,我们可以使用 Numpy 切片来裁剪图像:
ROI = image[y1:y2, x1:x2]
Run Code Online (Sandbox Code Playgroud)
但通常我们不会有右下角的顶点。在典型情况下,我们将遍历轮廓,其中可以使用 找到矩形 ROI 坐标cv2.boundingRect()。此外,如果我们想保存多个 ROI,我们可以保留一个计数器
cnts = cv2.findContours(grayscale_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
ROI_number = 0
for c in cnts:
x,y,w,h = cv2.boundingRect(c)
ROI = image[y:y+h, x:x+w]
cv2.imwrite('ROI_{}.png'.format(ROI_number), ROI)
ROI_number += 1
Run Code Online (Sandbox Code Playgroud)
从 OpenCV v2.2 开始,Numpy 数组被天真地用于显示图像。这种用于提取 ROI 的 Numpy 切片方法可能不适用于旧版本
示例:如果您有几点,并且想要复制区域包含它
r = cv2.boundingRect(pts)
cv2.imwrite('roi.png', im[r[0]:r[0]+r[2], r[1]:r[1]+r[3]])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73106 次 |
| 最近记录: |