机器学习1——聚类实现图像分割; 1)读入一幅图像 2)输入初始处理 3)分别用kmeans和kmeans++进行聚类; 4)显示分割后的图像。(对比背景简单和复杂的图像的分割效果)python代码
时间: 2024-12-20 13:19:12 浏览: 25
在Python中,可以使用OpenCV库结合scikit-learn库来实现基于K-means的图像分割。以下是简单的步骤和代码示例:
```python
# 导入库
import cv2
from sklearn.cluster import KMeans
import numpy as np
# 1) 读取图像
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE) # 读取灰度图像,替换为你的图片路径
if img is None:
print("Image not found.")
else:
height, width = img.shape
data = img.reshape((height * width, -1)) # 将二维图像展平成一维数据
# 2) 输入预处理 (这里假设不需要额外处理)
data = data.astype(np.float64)
# 3) 使用K-means
# a. 普通K-means (kmeans)
kmeans = KMeans(n_clusters=2, init='k-means++') # 初始化k值为2(二元分类),kmeans++提高初始质心选择效率
kmeans.fit(data)
# b. 分配簇标签
labels = kmeans.labels_
# 4) 显示分割后的图像
seg_img = labels.reshape((height, width))
binary_img = np.where(seg_img == 0, 0, 255) # 设置前景为白色,背景为黑色
seg_result = cv2.applyColorMap(binary_img, cv2.COLORMAP_OCEAN) # 应用颜色映射
cv2.imshow('Segmented Image (K-means)', seg_result)
# 对比复杂和简单图像效果
# 可以尝试将上述代码复制到另一张复杂图像是,比如使用不同的阈值或调整k值,然后比较两个结果。
#
阅读全文