I am trying to generate a color histogram of an image. I am using PIL for reading image files and trying to plot the same through matplotlib.
im = Image.open(sys.argv[1])
w, h = im.size
colors = im.getcolors(w*h) #Returns a list [(pixel_count, (R, G, B))]
Update: After some trial and error this code plots the histogram, but not the colors! (Takes laboriously long consumes ton loads of memory even for a 320x480 jpeg)
for idx, c in enumerate(colors):
plt.bar(idx, c[0], color=hexencode(c[1]))
plt.show()
Where,
def hexencode(rgb):
return '#%02x%02x%02x' % rgb
On execution, the program begins to consume infinite memory and no display is provided. OS memory usage went from < 380 MB to > 2.5 GB in matter of couple of minutes; post which I terminated the execution. How can I get solve the problem?
Here is an example of a color histogram of image with dominant Red shades:
解决方案
I tired your update code and it worked fine. Here is exactly what I am trying:
import PIL
from PIL import Image
from matplotl