Я реализовал содержание нашего обсуждения в комментариях выше следующим образом;вычисления выполняются на двумерной серой матрице, которую вы извлекли.Я присвоил нули и единицы значениям, представляющим интерес для матрицы, подаваемой в кластер, который в данном случае является KMeans, хотя при необходимости его можно заменить другими моделями.
import cv2
import numpy as np
filename = 'Dog.jpg'
img = cv2.imread(filename)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst = cv2.cornerHarris(gray,2,3,0.04)
dst = cv2.dilate(dst,None)
gray[dst>0.01*dst.max()] = 1
gray[dst<=0.01*dst.max()] = 0
from sklearn.cluster import KMeans
km = KMeans(n_clusters=2)
km.fit(gray)
centers = km.cluster_centers_
from sklearn.metrics.pairwise import cosine_distances
print(cosine_distances(centers))
Вывод:
[[0. 0.60477114]
[0.60477114 0. ]]
- это матрица, содержащая попарно косинусные расстояния центров.Дальнейшая подстройка может быть сделана по вызову .cornerHarris (), и, по правде говоря, следует проверить, соответствуют ли извлеченные кластеры, по крайней мере, приблизительно, хвосту и рту собаки.Кроме того, обобщение этого метода на другие изображения может быть невозможным.Неясно, что произойдет, например, если бы собака укусила свой хвост: группы, скорее всего, были бы идентифицированы способами, не связанными ни с хвостом, ни со ртом, ни с обоими.Чем больше делается настройка кода для этого конкретного изображения, тем ниже вероятность обобщения этой модели: таким образом, собака гонится за собственным хвостом.