python opencv 裁剪圆形图像,其他区域置为透明
时间: 2023-11-18 17:04:57 浏览: 311
opencv 图像切割
3星 · 编辑精心推荐
要裁剪一个圆形图像并将其余部分设置为透明,可以使用以下步骤:
1. 读取图像并将其转换为灰度图像。
```
import cv2
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
```
2. 使用霍夫圆变换检测图像中的圆形,并确定其半径和圆心坐标。
```
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, dp=1, minDist=20, param1=50, param2=30, minRadius=0, maxRadius=0)
x, y, r = int(circles[0][0][0]), int(circles[0][0][1]), int(circles[0][0][2])
```
3. 创建一个具有相同大小的掩码图像并将其所有像素设置为零。然后,使用cv2.circle函数在掩码图像上绘制圆形区域。
```
mask = np.zeros_like(gray)
cv2.circle(mask, (x, y), r, (255, 255, 255), -1)
```
4. 将原始图像与掩码图像进行按位与运算,以删除圆形以外的所有像素。
```
result = cv2.bitwise_and(img, img, mask=mask)
```
5. 将图像保存为png格式文件,以便保留透明度信息。
```
cv2.imwrite('result.png', result)
```
完整代码如下:
```
import cv2
import numpy as np
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, dp=1, minDist=20, param1=50, param2=30, minRadius=0, maxRadius=0)
x, y, r = int(circles[0][0][0]), int(circles[0][0][1]), int(circles[0][0][2])
mask = np.zeros_like(gray)
cv2.circle(mask, (x, y), r, (255, 255, 255), -1)
result = cv2.bitwise_and(img, img, mask=mask)
cv2.imwrite('result.png', result)
```
阅读全文