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

Python实现K-Means颜色聚类后按条件修改非最深色簇RGB值

现有代码的np.where写法逻辑错误,既没有做赋值操作,返回的索引也不符合数组筛选要求,因此无法得到预期效果。

正确实现代码

方案1:基于你现有生成的X_compressed修改

# 生成掩码:标签不等于最深色簇索引的像素位置
mask = optimial_kmeans.labels_ != hair_index
# 把掩码对应位置的像素直接设为白色
X_compressed[mask] = [255, 255, 255]
# 再重塑为原图像维度
result_img = X_compressed.reshape(img.shape[0], img.shape[1], 3)

方案2:更高效的直接生成方式(无需先生成全聚类压缩图)

# 先生成全白的数组,形状和拉平的rgb数组一致
result_flat = np.full_like(rgb, 255, dtype=np.uint8)
# 仅把属于最深色簇的像素替换为对应质心颜色
result_flat[optimial_kmeans.labels_ == hair_index] = centroid[hair_index].astype(np.uint8)
# 重塑为原图像尺寸
result_img = result_flat.reshape(img.shape[0], img.shape[1], 3)

优化建议

你当前仅通过R通道数值判断最深色的逻辑存在误差,建议改用灰度值判断,适配更多场景:

# 用标准灰度公式计算每个簇质心的灰度值
gray_centroid = 0.299 * centroid[:, 0] + 0.587 * centroid[:, 1] + 0.114 * centroid[:, 2]
# 取灰度最小的簇作为最深色簇
hair_index = np.argmin(gray_centroid)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:06:05