我正在尝试生成图像的颜色直方图。我使用PIL读取图像文件,并试图通过matplotlib打印相同的文件。
im = Image.open(sys.argv[1])
w, h = im.size
colors = im.getcolors(w*h) #Returns a list [(pixel_count, (R, G, B))]
更新:经过一些尝试和错误后,此代码绘制直方图,但不绘制颜色!(即使是一个320x480的jpeg,也要花费很长时间消耗大量内存)
for idx, c in enumerate(colors):
plt.bar(idx, c[0], color=hexencode(c[1]))
plt.show()
在哪里
def hexencode(rgb):
return '#%02x%02x%02x' % rgb
执行时,程序开始消耗无限内存,并且不提供任何显示。操作系统内存使用在几分钟内从380 MB减少到2.5 GB,然后我终止了执行。我怎样才能解决这个问题?
下面是具有主要红色阴影的图像的颜色直方图示例:
我一直在研究一个类似的问题,5年后遇到了这个问题。对于较大的图像,公认的答案是花太长的时间来简单地“生成图像的颜色直方图”。
我使用openCV而不是PIL来生成直方图,而且速度更快。
我厌倦了你的更新代码,它工作得很好。这正是我想要的:
更新:
我想matplotlib是想在每个酒吧都安排一个黑名单?如果有很多条,条是要薄才有颜色?如果有工具栏,可以放大绘图并查看条形图是否确实有颜色。因此,如果将边颜色设置为:
它起作用了!
要处理的图像:
结果:
分析
按总时间排序:
按累计时间排序
似乎所有的时间都花在matplotlib上了。如果你想加快速度,你可以找一个不同的绘图工具,减少“条”的数量,尝试自己在画布上画矩形?
时间安排:
相关问题 更多 >
编程相关推荐