opencv python利用掩膜提取固定坐标的圆形区域
时间: 2023-06-30 15:26:52 浏览: 161
要利用掩膜提取固定坐标的圆形区域,你可以使用OpenCV中的掩膜操作和圆形ROI截取。
下面是一个示例代码,演示了如何使用掩膜操作和圆形ROI截取来提取固定坐标的圆形区域:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('circles.jpg')
# 灰度化和高斯滤波
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (5, 5), 0)
# Hough圆检测
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)
# 提取圆心坐标和半径信息
circles = np.uint16(np.around(circles))
for i in circles[0, :]:
# 构造掩膜
mask = np.zeros_like(gray)
cv2.circle(mask, (i[0], i[1]), i[2], 255, -1)
# 对原图像进行掩膜操作
masked_img = cv2.bitwise_and(img, img, mask=mask)
# 截取圆形ROI
x, y, r = i[0], i[1], i[2]
circle_roi = masked_img[y-r:y+r, x-r:x+r]
# 显示结果
cv2.imshow('circle_roi', circle_roi)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这里,我们在Hough圆检测的基础上,使用cv2.circle()函数构造了一个掩膜,然后利用cv2.bitwise_and()函数对原图像进行掩膜操作,最后使用ROI截取函数cv2[y1:y2, x1:x2]来提取圆形区域。需要注意的是,x和y的顺序是(i[0], i[1])而不是常见的(i[1], i[0]),因为OpenCV中的像素点坐标是(x,y)。
在循环中,我们将提取的圆形区域通过cv2.imshow()函数显示出来,你可以更改代码来保存提取的圆形区域或进行其他操作。
阅读全文