opencv如何裁剪任意形状图片
时间: 2023-07-04 09:12:07 浏览: 135
在OpenCV中,可以使用掩码(mask)来裁剪任意形状的图像。下面是实现的步骤:
1. 读入原始图像和掩码图像,保证它们的大小和通道数一致。
2. 将掩码图像转换为单通道灰度图像。
3. 使用cv2.findContours()函数查找掩码图像中的轮廓。
4. 对于每个轮廓,使用cv2.boundingRect()函数计算其外接矩形。
5. 将原始图像和掩码图像按照相同的大小和通道数进行裁剪,裁剪区域为外接矩形。
下面是示例代码:
```python
import cv2
# 读入原始图像和掩码图像
img = cv2.imread('image.jpg')
mask = cv2.imread('mask.png')
# 将掩码图像转换为单通道灰度图像
gray_mask = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)
# 查找掩码图像中的轮廓
_, contours, _ = cv2.findContours(gray_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 对于每个轮廓,计算其外接矩形并进行裁剪
for contour in contours:
x, y, w, h = cv2.boundingRect(contour)
crop_img = img[y:y+h, x:x+w]
crop_mask = mask[y:y+h, x:x+w]
# 显示裁剪后的图像
cv2.imshow("crop_img", crop_img)
cv2.imshow("crop_mask", crop_mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
需要注意的是,如果掩码图像中存在多个不连通的区域,上述代码会对每个区域进行裁剪并显示。如果要保留所有裁剪后的图像,可以将它们保存到一个列表中。
阅读全文