如何在python中使用opencv复制图像区域?

2024-05-17 00:11:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用http://iamabhik.wordpress.com/category/opencv/中的思想实现一个车牌识别软件。

我在python中使用opencv,使用“import cv2”实现了车牌定位。它工作正常,现在我需要将车牌区域复制到另一个图像中,对字符进行分割,然后对OCR部分进行分割(可能使用神经网络)。

我找到了GetSubRect()函数来复制或隔离图像的一部分,但它似乎在python中不可用。有别的选择吗?ROI功能似乎也没有实现。

opencv的python接口是否有最新的文档?

我在Debian喘息/sid环境中从svn存储库(修订版7239)编译了opencv。

可以自由地提出解决这个问题的其他方法/想法。

提前谢谢。


Tags: 定位图像importcomhttp区域软件wordpress
3条回答

示例:如果有几个点,并且要复制的区域包含

r = cv2.boundingRect(pts)
cv2.imwrite('roi.png', im[r[0]:r[0]+r[2], r[1]:r[1]+r[3]])

下面是从图像中裁剪ROI的可视化方法

-------------------------------------------
|                                         | 
|    (x1, y1)                             |
|      ------------------------           |
|      |                      |           |
|      |                      |           | 
|      |         ROI          |           |  
|      |                      |           |   
|      |                      |           |   
|      |                      |           |       
|      ------------------------           |   
|                           (x2, y2)      |    
|                                         |             
|                                         |             
|                                         |             
-------------------------------------------

(0,0)视为图像的左上角,从左到右为x方向,从上到下为y方向。如果将(x1,y1)作为ROI的左上角和(x2,y2)作为右下角顶点,则可以使用Numpy切片裁剪图像:

ROI = image[y1:y2, x1:x2]

但通常我们没有右下顶点。在典型的情况下,我们将迭代通过轮廓,其中矩形ROI坐标可以用^{}找到。另外,如果我们想保存多个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

由于OpenCV v2.2,Numpy数组被天真地用于显示图像。这种用于提取ROI的Numpy切片方法可能不适用于旧版本

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]

这就是你的图像投资回报率。

所以选择适合你的。

相关问题 更多 >