python opencv图像分割kmeas代码
时间: 2023-07-23 21:17:28 浏览: 99
以下是基于OpenCV库的kmeans图像分割代码示例:
```python
import cv2
import numpy as np
# 加载原始图像
img = cv2.imread('example.jpg')
# 将图像转换为numpy数组
img_array = np.float32(img)
# 获取图像宽度和高度
width, height, _ = img.shape
# 将图像数组重塑为一维数组
img_array_reshape = img_array.reshape(-1, 3)
# 执行kmeans聚类
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
k = 3
ret, labels, centers = cv2.kmeans(img_array_reshape, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
# 将标签重塑为图像形状
labels_reshape = labels.reshape(width, height)
# 创建新图像数组
new_img = np.zeros_like(img_array)
# 将每个像素赋值为其所属的聚类中心颜色
for i in range(width):
for j in range(height):
new_img[i, j, :] = centers[labels_reshape[i, j], :]
# 将新图像数组转换为图像
new_img = np.uint8(new_img)
# 显示原始图像和分割后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Segmented Image', new_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,我们首先使用OpenCV库加载原始图像,然后将其转换为numpy数组。我们将图像数组重塑为一维数组,然后使用cv2.kmeans函数执行聚类。我们将聚类标签重塑为图像形状,并使用聚类中心颜色为每个像素赋值。最后,我们将新图像数组转换为图像,并显示原始图像和分割后的图像。
阅读全文