import cv2 import numpy as np import matplotlib.pyplot as plt img0 = cv2.imread("C:/Users/86159/Desktop/shijue/8.png") img1 = cv2.resize(img0, dsize = None, fx = 0.5, fy = 0.5) img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) h, w = img1.shape[:2] print(h, w) cv2.namedWindow("W0") cv2.imshow("W0", img2) cv2.waitKey(delay = 0) #K-means均值聚类 Z = img1.reshape((-1, 3)) Z = np.float32(Z) #转化数据类型 c = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0) k = 4 #聚类中心个数,一般来说也代表聚类后的图像中的颜色的种类 ret, label, center = cv2.kmeans(Z, k, None, c, 10, cv2.KMEANS_RANDOM_CENTERS) center = np.uint8(center) res = center[label.flatten()] img9 = res.reshape((img1.shape)) cv2.namedWindow("W2") cv2.imshow("W2", img9) cv2.waitKey(delay = 0) 根据以上代码分析k-means图像分割实验结果
时间: 2024-04-01 17:33:47 浏览: 72
白色大气风格的建筑商业网站模板下载.rar
以上代码是基于OpenCV库实现的K-means均值聚类图像分割的实验代码。具体实现步骤如下:
1. 首先读取一张图像img0,并将其缩小为原来的0.5倍,得到img1。
2. 对img1进行灰度化处理,得到img2。
3. 获取img1的高度h和宽度w,并打印输出。
4. 创建一个名为"W0"的窗口,并将img2显示在窗口中,等待用户按下任意键。
5. 将img1的像素值reshape为(-1,3)的矩阵Z,并将其转化为float32类型。
6. 定义聚类停止条件c,包括最大迭代次数和误差阈值。
7. 定义聚类中心个数k。
8. 调用cv2.kmeans函数,对Z进行聚类,得到聚类标签label和聚类中心center。
9. 将center的数据类型转换为uint8类型。
10. 将label展平,得到一维的聚类标签数组,再根据标签数组和聚类中心重新构造图像,得到img9。
11. 创建一个名为"W2"的窗口,并将img9显示在窗口中,等待用户按下任意键。
根据以上代码,可以得到K-means均值聚类图像分割的实验结果。具体结果可能因为不同的图像和聚类中心个数而有所不同。
阅读全文