感兴趣的区域opencv python
image-processing
opencv
python
5
0

我正在尝试使用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获得投资回报。有人可以建议如何解决吗?

谢谢

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

文档中所述 ,关于收到的错误消息,您需要导入适当的模块,然后调用SetImageROI()方法:

import cv
cv.SetImageROI(imag, rect)
收藏
评论

这是用于从图像中选择ROI的可视化

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

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

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

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

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数组天真地用于显示图像。此Numpy切片方法提取ROI可能不适用于旧版本

收藏
评论

好的,进一步分析发现cv2由于一直支持numpy数组结构,因此不再需要API,整个图像可以在数组本身中进行操作。例如:

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

这里c1是左侧列像素位置,而r1是相应的行位置。现在,img将在像素内指定的图像作为ROI。

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号