python OpenCV 掩码裁剪
时间: 2023-06-22 20:29:04 浏览: 121
drawing-functions.zip
在 OpenCV 中,可以通过掩码(mask)来实现图像的裁剪。掩码是一张与原图像大小相同的二值图像,取值为 0 或 255,其中取值为 255 的像素表示裁剪后要保留的部分,取值为 0 的像素表示裁剪后要舍弃的部分。下面给出一个示例代码,演示如何使用掩码进行图像的裁剪。
```python
import cv2
import numpy as np
# 读取原图像和掩码
img = cv2.imread('image.jpg')
mask = cv2.imread('mask.jpg', cv2.IMREAD_GRAYSCALE)
# 将掩码转换为二值图像
mask = cv2.threshold(mask, 0, 255, cv2.THRESH_BINARY)[1]
# 对原图像应用掩码
img_masked = cv2.bitwise_and(img, img, mask=mask)
# 寻找最小外接矩形
contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
rect = cv2.boundingRect(contours[0])
# 裁剪图像
img_cropped = img_masked[rect[1]:rect[1]+rect[3], rect[0]:rect[0]+rect[2]]
# 显示原图像和裁剪后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Cropped Image', img_cropped)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,`cv2.imread` 函数用于读取原图像和掩码。由于掩码是灰度图像,因此需要使用 `cv2.IMREAD_GRAYSCALE` 参数读取。接着使用 `cv2.threshold` 函数将掩码转换为二值图像。然后使用 `cv2.bitwise_and` 函数对原图像应用掩码,得到一个掩码后的图像。接着使用 `cv2.findContours` 函数寻找掩码中的轮廓,然后使用 `cv2.boundingRect` 函数寻找最小外接矩形,即包围所有轮廓的矩形。最后使用 NumPy 数组索引操作裁剪图像。
阅读全文