计算撇除的颜色数

2024-04-26 08:12:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够计算图像一部分的颜色数量

我考虑的一种方法是绘制灰度图像的直方图,然后计算峰值的数量,这就是颜色的数量


histogram, bin_edges = np.histogram(gray_image, bins = 256, range=(0,1))
plt.plot(histogram)
peaks = signal.find_peaks_cwt(histogram, 10)

当我这样做时,signal.find_peaks_cwt表示数组的索引太多

我该怎么做,或者有没有更好的方法来计算颜色的数量


Tags: 方法图像数量signalbin颜色绘制find
1条回答
网友
1楼 · 发布于 2024-04-26 08:12:46

这个答案让人有点想发表评论:

我不太清楚你想做什么。您是要计算图像中所有可分辨元素的数量,还是要将所有阴影(例如红色)计算为一种颜色

还可以使用不同类型的数据类型来表示图像(例如float∈ [-1,1]或uint8∈ [0, 255]). 在第一行中,您显然希望根据range=(0,1)得到一个float类型的图像。 通过装箱,您可能会丢失有关可分辨元素的信息,因此无法计算可分辨元素的数量

可分辨颜色计数

要计算灰度图像中的所有可用颜色(=可分辨元素),可以使用以下一行。(这当然也适用于float图像。如果您真的想区分每种颜色,这是完美的,但如果不是,您的命令np.histogram是个好主意。)

len(set(gray_image.flatten()))

至于scipy.signal.find_peaks_cwt(histogram, 10)的错误,^{}需要一个1D数组作为第二个参数。如果您提供一个numpy数组,它就可以正常工作

计算相似颜色的簇

如果您想对相似的颜色进行聚类,而不是对它们进行两次计数,则可以选择不同的方法。这里的关键词是“颜色量化”。 如图this post所示,您可以使用聚类算法对图像中使用的颜色进行量化。 在颜色量化之后,您可以简单地重塑图像以保留RGB元组,并使用如下numpysunique方法:

import numpy as np

len(np.unique(color_image.reshape(-1, 3), axis = 0))

有很多方法可以减少颜色的数量。枕头有两个功能posterize^{}。我在前面提到的帖子中展示了一个使用Scikit learn的k-means方法,在使用预定义的颜色集时,您还可以尝试使用距离度量

相关问题 更多 >