Расчет расстояния между двумя точками на изображении с использованием Python - PullRequest
0 голосов
/ 12 сентября 2018

Вот изображение, мне нужно найти рот собаки и ее хвост, и мне нужно найти расстояние между хвостом собаки и ее ртом, используя обработку изображения (Примечание: не следует рассматривать минимальное или пространственное расстояние всего тела).

enter image description here

import cv2
import numpy as np

filename = 'Dog-catches-own-tail_1.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)

img[dst>0.01*dst.max()]=[0,0,255]
cv2.imwrite('Image.jpg',img)

После запуска фрагмента кода я могу получить здесь угол:

enter image description here

1 Ответ

0 голосов
/ 12 сентября 2018

Я реализовал содержание нашего обсуждения в комментариях выше следующим образом;вычисления выполняются на двумерной серой матрице, которую вы извлекли.Я присвоил нули и единицы значениям, представляющим интерес для матрицы, подаваемой в кластер, который в данном случае является 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 (), и, по правде говоря, следует проверить, соответствуют ли извлеченные кластеры, по крайней мере, приблизительно, хвосту и рту собаки.Кроме того, обобщение этого метода на другие изображения может быть невозможным.Неясно, что произойдет, например, если бы собака укусила свой хвост: группы, скорее всего, были бы идентифицированы способами, не связанными ни с хвостом, ни со ртом, ни с обоими.Чем больше делается настройка кода для этого конкретного изображения, тем ниже вероятность обобщения этой модели: таким образом, собака гонится за собственным хвостом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...