OpenCV python k均值聚类分类
import numpy as np
import cv2
import matplotlib.pyplot as plt
def main():
s_mi = np.random.randint(0, 50, 60)
b_mi = np.random.randint(200, 250, 60)
mi_data = np.hstack((s_mi, b_mi))
mi_data = np.float32(mi_data)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
flags = cv2.KMEANS_RANDOM_CENTERS
retval, best_labels, centers = cv2.kmeans(mi_data, 2, None, criteria, 10, flags)
print("紧密度:", retval)
print("分类标签:", *best_labels)
print("中心点数据", centers)
small_mi = []
big_mi = []
for i in range(0, len(best_labels)):
if best_labels[i] == 0:
small_mi.append(mi_data[i])
elif best_labels[i] == 1:
big_mi.append(mi_data[i])
plt.plot(small_mi, "ro")
plt.plot(big_mi, "bo")
plt.plot(centers[0], "rx")
plt.plot(centers[1], "bx")
plt.show()
if __name__ == '__main__':
main()