I want to use a single image to make a cluster of 8 color. Then, i use these cluster to several different images.
I tried to change center in KMeans but it got me
TypeError: only size-1 arrays can be converted to Python scalars
This is a part of my code
img = mpimg.imread('filter3.jpg')
img1 = mpimg.imread('flower (1).jpg')
img2 = mpimg.imread('flower (2).jpg')
img3 = mpimg.imread('flower (3).jpg')
img4 = mpimg.imread('flower (4).jpg')
Z = img.reshape((-1,3))
Z1 = img1.reshape((-1,3))
Z2 = img2.reshape((-1,3))
Z3 = img3.reshape((-1,3))
Z4 = img4.reshape((-1,3))
# convert to np.float32
Z = np.float32(Z)
Z1 = np.float32(Z1)
Z2 = np.float32(Z2)
Z3 = np.float32(Z3)
Z4 = np.float32(Z4)
# define criteria, number of clusters(K) and apply kmeans()
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
K = 8
ret,label,center=cv2.kmeans(Z,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)
ret1,label1,center1=cv2.kmeans(Z1,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)
ret2,label2,center2=cv2.kmeans(Z2,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)
ret3,label3,center3=cv2.kmeans(Z3,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)
ret4,label4,center4=cv2.kmeans(Z4,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)
ret1a,label1a,center1a=cv2.kmeans(Z1,K,None,criteria,1,center)
ret2a,label2a,center2a=cv2.kmeans(Z2,K,None,criteria,1,center)
ret3a,label3a,center3a=cv2.kmeans(Z3,K,None,criteria,1,center)
ret4a,label4a,center4a=cv2.kmeans(Z4,K,None,criteria,1,center)
I expect the output to be a histogram of label1a until label4a.
Don't abuse kmeans to perform classification.
Once you have fixed your palette, simply map each pixel to the nearest color. No need for kmeans for this step, no "learning" there.