Aja*_*air 13 python opencv image-processing
我正在尝试使用opencv python获取图像区域(ROI).使用的opencv版本是2.4.3.但是,当我尝试调用API时
cv2.SetImageROI
Run Code Online (Sandbox Code Playgroud)
它返回错误
AttributeError: 'module' object has no attribute 'SetImageROI'
Run Code Online (Sandbox Code Playgroud)
此外,在检查文档时,它似乎表明这个api是一个遗留的python函数. http://docs.opencv.org/2.4.3/search.html?q=setimageroi
我不知道如何在python中使用当前版本的opencv来获得ROI.有人可以建议如何解决这个问题吗?
谢谢
Aja*_*air 31
好的,进一步的分析认识到cv2因为它一直支持numpy数组结构,所以不再需要API,整个图像可以在数组本身中进行操作.例如:
img = cv2.imread('image.png')
img = img[c1:c1+25,r1:r1+25]
Run Code Online (Sandbox Code Playgroud)
这里c1是左侧列像素位置,r1是相应的行位置.而img现在将像素内指定的图像作为ROI.
编辑:在这里很好地解释,如何在python中使用opencv复制图像区域?
nat*_*ncy 13
这是从图像中选择 ROI 的可视化
-------------------------------------------
| |
| (x1, y1) w |
| ------------------------ |
| | | |
| | | |
| | ROI | h |
| | | |
| | | |
| | | |
| ------------------------ |
| (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)
但通常我们不会有右下角的顶点。在典型情况下,我们很可能会在迭代轮廓时(x,y,w,h)
获得ROI 的边界框坐标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]
Run Code Online (Sandbox Code Playgroud)
从 OpenCV v2.2 开始,Numpy 数组被天真地用于显示图像。这种用于提取 ROI 的 Numpy 切片方法可能不适用于旧版本
小智 5
如文档中所述,关于收到的错误消息,您需要导入适当的模块,然后调用SetImageROI()
方法:
import cv
cv.SetImageROI(imag, rect)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
52398 次 |
最近记录: |