You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K-means聚类:如何匹配OpenCV返回的centers数组各值对应的颜色

解决方案
  • 你代码里cent = centers.sort()存在逻辑问题:numpy.ndarray.sort()是原地排序方法,没有返回值,所以你打印的cent实际为None,你输出的左上角数值不是正确的聚类中心列表。

cv2.kmeans返回的centers数组和labels的类别编号是严格一一对应的:

  • 标签值为0的所有像素,对应的聚类中心就是centers[0]
  • 标签值为1的所有像素,对应的聚类中心就是centers[1]
  • 以此类推直到k-1类

你代码里生成分割图的逻辑segmented_image = centers[labels.flatten()]本身就用了这个对应规则,所以每个centers[i]的数值,就是分割后第i类的像素通道值,也就是这个类对应的颜色数值。

你可以用下面两种方法直观查看对应关系:

方法1:直接打印对应关系

在得到centers和labels后遍历输出即可:

unique_labels = np.unique(labels)
for label in unique_labels:
    print(f"类别编号{label},对应像素值:{centers[label]},对应颜色通道数值即为此数组")

方法2:可视化每个类别对应的纯色块+数值标注

生成每个类别的纯色小图和数值一同显示,就能直观对照:

block_size = 50
fig, axes = plt.subplots(1, k, figsize=(k*2, 2))
for i in range(k):
    # 生成对应颜色的纯色块
    color_block = np.full((block_size, block_size, 2), centers[i], dtype=np.uint8)
    axes[i].imshow(color_block)
    axes[i].set_title(f"类别{i}\n值:{centers[i]}")
    axes[i].axis('off')
plt.show()

如果需要和你分割图显示的颜色完全对应,保证显示色块和显示分割图时用的cmap参数一致即可。

内容的提问来源于stack exchange,提问作者Savannah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 09:45:04