【发布时间】:2020-09-11 11:30:58
【问题描述】:
我有一个吃几秒钟的功能。该函数应返回给定图像中的 Top(n) 颜色。必须对返回值进行排序,因此我可以使用第一、第二、第三最高颜色的 rgb 值。
首先,我有一个 PIL.Image 对象,我在 x,y 坐标上循环并将其计算在默认字典中。我已经用 Numpy 数组替换了项目中的 PIL 对象,这给了我很大的提升,但我不知道在这种情况下如何替换 defaultdict。
我目前的解决方案:
import numpy as np
from scipy import misc # for example Image
from collections import defaultdict
def count_colors(img, n):
img = img.reshape(-1, img.shape[-1])
color = defaultdict(int)
for pixel in img:
rgb = (pixel[0], pixel[1], pixel[2])
color[rgb] += 1
sorted_color = sorted(color.items(), key=lambda k_v: k_v[1], reverse=True)
sorted_color = sorted_color[:n]
return sorted_color
img = misc.face() # example Numpy Image array
top_colors = count_colors(img, n=5)
display(top_colors)
电流输出:
[((9, 9, 9), 1062),
((10, 10, 10), 700),
((8, 8, 8), 668),
((9, 7, 8), 586),
((9, 7, 10), 579)]
有没有真正的 Numpy 方法来解决这个问题?
【问题讨论】:
标签: python numpy image-processing colors numpy-slicing