兴趣区域opencv python



我试图使用opencv python获得图像(ROI)的区域。使用的opencv版本为2.4.3。但是,当我尝试调用API

cv2.SetImageROI

它返回这个错误

AttributeError: 'module' object has no attribute 'SetImageROI'

在检查文档时,它似乎表明这个api是一个遗留的python函数。http://docs.opencv.org/2.4.3/search.html?q=setimageroi

我不确定如何在python中使用当前版本的opencv来获得ROI。谁能建议一下怎么做这件事?

谢谢

好的,进一步分析后发现,cv2既然已经支持numpy数组结构,就不再需要任何API了,整个图像都可以在数组本身进行操作。如:

img = cv2.imread('image.png')
img = img[c1:c1+25,r1:r1+25]

c1为左侧列像素位置,r1为对应的行位置。img现在将像素内的图像指定为ROI。

编辑:这里很好地解释了,如何在python中使用opencv复制图像区域?

从图像中选择ROI的可视化方法

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

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

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

但是通常我们不会有右下角的顶点。在典型的情况下,我们将最有可能有ROI的边界框(x,y,w,h)坐标从cv2.boundingRect()迭代时通过轮廓

cnts = cv2.findContours(grayscale_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
    x,y,w,h = cv2.boundingRect(c)
    ROI = image[y:y+h, x:x+w]

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

正如文档中提到的,对于您得到的错误消息,您更需要导入适当的模块,然后调用SetImageROI()方法:

import cv
cv.SetImageROI(imag, rect)

相关内容

  • 没有找到相关文章

最新更新