30 lines
887 B
Python
Executable file
30 lines
887 B
Python
Executable file
from __future__ import print_function
|
|
import binascii
|
|
from PIL import Image
|
|
import numpy as np
|
|
import scipy
|
|
import scipy.misc
|
|
import scipy.cluster
|
|
import sys
|
|
|
|
NUM_CLUSTERS = 5
|
|
|
|
# print('reading image')
|
|
im = Image.open(sys.argv[1])
|
|
im = im.resize((150, 150)) # optional, to reduce time
|
|
ar = np.asarray(im)
|
|
shape = ar.shape
|
|
ar = ar.reshape(np.product(shape[:2]), shape[2]).astype(float)
|
|
|
|
# print('finding clusters')
|
|
codes, dist = scipy.cluster.vq.kmeans(ar, NUM_CLUSTERS)
|
|
# print('cluster centres:\n', codes)
|
|
|
|
vecs, dist = scipy.cluster.vq.vq(ar, codes) # assign codes
|
|
counts, bins = np.histogram(vecs, len(codes)) # count occurrences
|
|
|
|
index_max = np.argmax(counts) # find most frequent
|
|
peak = codes[index_max]
|
|
colour = binascii.hexlify(bytearray(int(c) for c in peak)).decode('ascii')
|
|
# print('most frequent is %s (#%s)' % (peak, colour))
|
|
print(colour)
|