如何用Python的OpenCV获取二值图像轮廓及中心点坐标的代码
时间: 2023-06-13 14:07:41 浏览: 228
获取二值图像轮廓及中心点坐标的代码如下:
```python
import cv2
# 读取二值图像
img = cv2.imread('binary_image.png', cv2.IMREAD_GRAYSCALE)
# 获取轮廓
contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 获取轮廓中心点坐标
center_points = []
for contour in contours:
moments = cv2.moments(contour)
cX = int(moments["m10"] / moments["m00"])
cY = int(moments["m01"] / moments["m00"])
center_points.append((cX, cY))
# 在原图上绘制轮廓及中心点
color_img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
cv2.drawContours(color_img, contours, -1, (0, 255, 0), 2)
for center_point in center_points:
cv2.circle(color_img, center_point, 3, (0, 0, 255), -1)
# 显示原图、二值图、轮廓及中心点
cv2.imshow('original image', cv2.imread('original_image.png'))
cv2.imshow('binary image', img)
cv2.imshow('contours and center points', color_img)
cv2.waitKey(0)
```
其中,`cv2.findContours()` 函数用于获取轮廓,参数解释如下:
- 第一个参数是二值化的图像,即只有黑色和白色两种颜色。
- 第二个参数是轮廓检索模式,`cv2.RETR_EXTERNAL` 表示只检索最外层轮廓。
- 第三个参数是轮廓逼近方法,`cv2.CHAIN_APPROX_SIMPLE` 表示只保留轮廓的端点。
`cv2.moments()` 函数用于计算轮廓的矩,从而得到轮廓的中心点坐标。其中,`moments["m00"]` 表示轮廓的面积,`moments["m10"]` 和 `moments["m01"]` 分别表示轮廓的一阶矩,即 x 和 y 方向上的重心坐标。
最后,使用 `cv2.drawContours()` 函数在原图上绘制轮廓,并使用 `cv2.circle()` 函数在中心点处绘制红色圆圈。
阅读全文