【问题标题】:Region of Interest opencv python感兴趣的区域 opencv python
【发布时间】:2013-03-03 17:19:13
【问题描述】:

我正在尝试使用 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。有人可以建议如何解决这个问题吗?

谢谢

【问题讨论】:

    标签: python image opencv image-processing roi


    【解决方案1】:

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

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

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

    编辑: 这里解释得很好,How to copy a image region using opencv in python?

    【讨论】:

    【解决方案2】:

    这是从图像中选择 ROI 的可视化效果

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

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

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

    但通常我们不会有右下角的顶点。在典型情况下,当迭代轮廓时,我们很可能会从 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 数组被天真地用于显示图像。这种提取 ROI 的 Numpy 切片方法可能不适用于旧版本

    【讨论】:

      【解决方案3】:

      正如documentation 中提到的,关于你得到的错误信息,你宁愿需要导入相应的模块,然后调用SetImageROI() 方法:

      import cv
      cv.SetImageROI(imag, rect)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-25
        • 2013-02-28
        • 2017-09-28
        • 2011-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多