【问题标题】:Get main colors of pixels in an image获取图像中像素的主要颜色
【发布时间】:2021-02-18 21:59:13
【问题描述】:

我正在尝试获取图像的所有颜色。我正在这样做

unique_rgbs = np.unique(resized_img.reshape(-1, resized_img.shape[2]), axis=0)

我的期望是得到 6 种颜色,但我得到了大约 2000 种颜色,因为颜色之间的边界不是实心的。然后我更改了图像的颜色,使其只有红色[255,0,0] 绿色[0,255,0] 蓝色[255,0,0] 和黄色[0,255,255],并试图摆脱使用以下代码的所有其他颜色

img[img[...,0] > 128] = 255
img[img[...,0] <= 128] = 0
 
img[img[...,1] > 128] = 255
img[img[...,1] <= 128] = 0
 
img[img[...,2] > 128] = 255
img[img[...,2] <= 128] = 0

但它不起作用。结果图像只有黑白,np.unique 的结果表示图像中有 26 种颜色。

original image

zoomed in detail

【问题讨论】:

  • 如果您可以控制原始图像,请不要使用 jpeg。它是有损的,可能会导致这样的伪影。尝试改用 png。
  • 我的输入图片是png
  • 您似乎共享了一个 JPEG。
  • 您分享的图片是否真正代表了您的图片?您要处理的所有图像都是由高度饱和的原色组成的吗?你还有其他例子吗?
  • @Tereza Cool,我只是提到它以供将来参考,因为您发布的原始图像是 jpeg。

标签: python opencv colors color-detection


【解决方案1】:

集群似乎在这种情况下起作用:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

X = plt.imread("xGmSz.jpg").reshape(-1, 3)

# cluster pixels
N = 6
km = KMeans(n_clusters=N, init="k-means++")
km.fit(X)
# get cluster centers
colors = km.cluster_centers_.astype(int)
plt.imshow(cen.reshape(1, N, 3))

它给出:

【讨论】:

  • 嘿,谢谢你的回答,但问题是,我想在其他图片上也使用代码,而不知道颜色的数量并手动定义它
猜你喜欢
  • 2013-07-21
  • 2019-07-27
  • 1970-01-01
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多