[英]numpy: unique list of colors in the image
我有一個圖像img
:
>>> img.shape
(200, 200, 3)
在像素 (100, 100) 上,我有一個漂亮的顏色:
>>> img[100,100]
array([ 0.90980393, 0.27450982, 0.27450982], dtype=float32)
現在我的問題是:這張圖片中有多少種不同的顏色,我該如何枚舉它們?
我的第一個想法是numpy.unique()
,但不知何故我用錯了。
您最初使用numpy.unique()
想法實際上可以以最佳性能完美地完成工作:
numpy.unique(img.reshape(-1, img.shape[2]), axis=0)
首先,我們展平矩陣的行和列。 現在矩陣的行數與圖像中的像素數一樣多。 列是每個像素的顏色分量。
然后我們計算扁平矩陣的唯一行。
你可以這樣做:
set( tuple(v) for m2d in img for v in m2d )
一種直接的方法是利用在將所有像素列表投射為一組時發生的重復數據刪除:
unique_pixels = np.vstack({tuple(r) for r in img.reshape(-1,3)})
根據您提取唯一像素的原因,另一種可能有實際用途的方法是使用 Numpy 的histogramdd
函數將圖像像素分箱為一些預先指定的保真度,如下所示(假設像素值范圍從 0 到 1給定的圖像通道):
n_bins = 10
bin_edges = np.linspace(0, 1, n_bins + 1)
bin_centres = (bin_edges[0:-1] + bin_edges[1::]) / 2.
hist, _ = np.histogramdd(img.reshape(-1, 3), bins=np.vstack(3 * [bin_edges]))
unique_pixels = np.column_stack(bin_centres[dim] for dim in np.where(hist))
如果出於任何原因您需要計算每種獨特顏色出現的次數,您可以使用以下命令:
from collections import Counter
Counter([tuple(colors) for i in img for colors in i])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.