Как использовать кластер для нескольких изображений? - PullRequest
0 голосов
/ 02 апреля 2019

Я хочу использовать одно изображение, чтобы сделать кластер из 8 цветов. Затем я использую эти кластеры для нескольких разных изображений.

Я пытался сменить центр в KMeans, но я получил

TypeError: в скаляры Python могут быть преобразованы только массивы размера 1

Это часть моего кода

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)

Я ожидаю, что вывод будет гистограммой label1a до label4a.

1 Ответ

0 голосов
/ 02 апреля 2019

Не используйте kmeans для выполнения классификации.

Как только вы исправите свою палитру, просто сопоставьте каждый пиксель с ближайшим цветом.Нет необходимости в kmeans для этого шага, нет «обучения» там.

...