python根据轮廓裁剪图片
时间: 2023-10-10 07:09:23 浏览: 144
使用OpenCV库可以实现对图片的轮廓裁剪,具体步骤如下:
1. 读入图片,并转为灰度图像。
```
import cv2
image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
```
2. 进行边缘检测,可以使用Canny算子。
```
edges = cv2.Canny(gray, 30, 150)
```
3. 找到轮廓,并选择需要裁剪的轮廓。
```
contours, hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 选择需要裁剪的轮廓
cnt = contours[0]
```
4. 创建一个掩膜,将需要裁剪的轮廓部分填充为白色,其余部分为黑色。
```
mask = np.zeros_like(gray)
cv2.drawContours(mask, [cnt], 0, (255, 255, 255), -1)
```
5. 将原图像与掩膜进行按位与操作,得到裁剪后的图像。
```
result = cv2.bitwise_and(image, image, mask=mask)
```
完整代码如下:
```
import cv2
import numpy as np
# 读入图片
image = cv2.imread('image.jpg')
# 转为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 边缘检测
edges = cv2.Canny(gray, 30, 150)
# 找到轮廓,并选择需要裁剪的轮廓
contours, hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[0]
# 创建掩膜
mask = np.zeros_like(gray)
cv2.drawContours(mask, [cnt], 0, (255, 255, 255), -1)
# 按位与操作
result = cv2.bitwise_and(image, image, mask=mask)
# 显示结果
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文