opencv不规则roi提取
时间: 2023-06-13 19:09:17 浏览: 173
OpenCV提供了多种方法来提取不规则ROI(感兴趣区域)。其中一种常用的方法是使用掩码(mask)来定义ROI。
以下是一些基本步骤:
1. 创建一个与原始图像大小相同的二进制掩码(mask),并使用白色填充ROI区域,其余区域使用黑色填充。可以使用OpenCV的函数来创建矩形、圆形、多边形等形状的mask,也可以手动创建。
2. 将掩码应用到原始图像上,使用位与运算(bitwise_and)将原始图像与掩码相乘,这将保留ROI区域,其余区域将被置为0。
3. 可以选择将ROI提取到一个新的图像中,或在原始图像上使用ROI进行操作。如果要提取ROI到一个新的图像中,可以使用OpenCV的函数copyTo。
下面是一个简单的示例代码:
``` python
import cv2
import numpy as np
# Read image
img = cv2.imread('image.jpg')
# Define ROI coordinates
vertices = np.array([[(50,50),(200,50),(200,200),(50,200)]], dtype=np.int32)
# Create a binary mask
mask = np.zeros_like(img)
cv2.fillPoly(mask, vertices, (255,255,255))
# Apply mask to image
masked_img = cv2.bitwise_and(img, mask)
# Extract ROI to a new image
roi = np.zeros_like(masked_img)
roi[mask == 255] = masked_img[mask == 255]
# Display images
cv2.imshow('Original Image', img)
cv2.imshow('Masked Image', masked_img)
cv2.imshow('ROI', roi)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,我们首先读取了一张图像,然后定义了ROI区域的顶点坐标。接下来,我们创建了一个与原始图像大小相同的二进制掩码,并使用fillPoly函数填充ROI区域。然后,我们使用位与运算将原始图像与掩码相乘,这将保留ROI区域,其余区域将被置为0。最后,我们可以选择将ROI提取到一个新的图像中,或在原始图像上使用ROI进行操作。在这个例子中,我们提取了ROI到一个新的图像中,并将其显示出来。
阅读全文