直接上代码,原理大家都可以查到
注意:以下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)