图像分割:K均值聚类分割(Kmeans)--python实现

直接上代码,原理大家都可以查到

注意:以下img自己加载即可,我是事先把图片转换成了单通道的Array形式,并且我的img是归一化后在0-1的。生成的label只有0,1两个值。

import cv2
import numpy as np

def seg_kmeans_gray(img):
    # 读取图片
    img = img

    # 展平
    img_flat = img.reshape((img.shape[0] * img.shape[1], 1))
    img_flat = np.float32(img_flat)

    # 迭代参数
    criteria = (cv2.TERM_CRITERIA_EPS + cv2.TermCriteria_MAX_ITER, 20, 0.5)
    flags = cv2.KMEANS_RANDOM_CENTERS

    # 进行聚类
    compactness, labels, centers = cv2.kmeans(img_flat, 2, None, criteria, 10, flags)

    # 显示结果
    img_output = 1-labels.reshape((img.shape[0], img.shape[1]))
    print(img_output)
    return img_output
    
label = seg_kmeans_gray(img)
发布了46 篇原创文章 · 获赞 18 · 访问量 1810
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章