У меня есть цветное изображение, и я хотел выполнить кластеризацию k-средних с помощью OpenCV.
Это изображение, на котором я хотел выполнить кластеризацию методом k-средних.
Это мой код:
import numpy as np
import cv2
import matplotlib.pyplot as plt
image1 = cv2.imread("./triangle.jpg", 0)
Z1 = image1.reshape((-1))
Z1 = np.float32(Z1)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
K1 = 2
ret, mask, center =cv2.kmeans(Z1,K1,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)
center = np.uint8(center)
print(center)
res_image1 = center[mask.flatten()]
clustered_image1 = res_image1.reshape((image1.shape))
for c in center:
plt.hlines(c, xmin=0, xmax=max(clustered_image1.shape[0], clustered_image1.shape[1]), lw=1.)
plt.imshow(clustered_image1)
plt.show()
Это то, что я получаю от переменной center
.
[[112]
[255]]
Это выходное изображение
Моя проблема в том, что я не могу понять вывод. У меня есть два списка в переменной center
, потому что я хотел два класса. Но почему они имеют только одно значение?
Разве это не должно быть что-то вроде этого (что имеет смысл, потому что центроиды должны быть точками):
[[x1, y1]
[x2, y2]]
вместо этого:
[[x]
[y]]
и если я прочитаю изображение как цветное изображение следующим образом:
image1 = cv2.imread("./triangle.jpg")
Z1 = image1.reshape((-1, 3))
Я получаю этот вывод:
[[255 255 255]
[ 89 173 1]]
Вывод цветного изображения
Может кто-нибудь объяснить мне, как я могу получить 2d точки вместо линий? Кроме того, как мне интерпретировать вывод, который я получил от переменной center
при использовании цветного изображения?
Пожалуйста, дайте мне знать, если я неясно где-нибудь. Спасибо!!