2014-12-22 3 views
0

Я пишу библиотеку python, чтобы выполнять базовую обработку на геометрических изображениях. Одна из желаемых функций - вернуть список расстояний от всех углов от начала координат. Я изо всех сил пытаюсь сделать это, посмотрев на распечатку моих угловых объектов;OpenCV python - расстояние от начала до Harris Corners

[[ 9.20031281e+01 9.20031281e+01 9.20031281e+01 ..., 6.66796863e-01 
1.01710939e+01 1.01710939e+01] 
[ 1.36668701e+02 1.36668701e+02 1.36668701e+02 ..., 1.33374023e+00 
1.07448441e+02 1.07448441e+02] 
[ 1.36668701e+02 1.36668701e+02 1.36668701e+02 ..., 1.33374023e+00 
1.07448441e+02 1.07448441e+02] 
..., 
[ -7.81250012e-04 3.12500005e-03 1.83593743e-02 ..., 3.36616707e+01 
2.24355469e+01 2.24355469e+01] 
[ -4.88281257e-05 3.12500005e-03 5.41992206e-03 ..., 3.67563972e+01 
2.24355469e+01 2.24355469e+01] 
[ -4.88281257e-05 5.37109387e-04 5.37109387e-04 ..., 3.67563972e+01 
2.24355469e+01 2.24355469e+01]] 

Это изображение было похоже на это (обратите внимание на два розовых обнаруженных угла);

enter image description here

Как я могу найти расстояние (угол не требуется, хотя было бы полезно тоже) от происхождения по углам?

Спасибо!

+0

где вы определяете происхождение? – chris

+0

нигде, я думаю, что начало - верхний левый угол (0, 0) по умолчанию –

ответ

0

Ниже приведен пример получения местоположения (x,y) каждого совпадения. Я буду честен, что это не самый аккуратный способ сделать что-то, и, возможно, самый быстрый, но он работает (также я не доработал параметры обнаружения).

import cv2 
import numpy as np 
import math 

filename = "/Users/me/Downloads/square.jpg" 
img = cv2.imread(filename) 
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
gray = np.float32(gray) 
dst = cv2.cornerHarris(gray,2,3,0.04) 

for y in range(0, gray.shape[0]): 
for x in range(0, gray.shape[1]): 
    harris = cv2.cv.Get2D(cv2.cv.fromarray(dst), y, x) # get the x,y value 
    # check the corner detector response 
    if harris[0] > 0.01*dst.max(): 
    print x,y # these are the locations of the matches 
    print 'Distance in pixels from origin: %d' % math.sqrt(x**2+y**2) 
    # draw a small circle on the original image 
    cv2.circle(img,(x,y),2,(155, 0, 25)) 

cv2.imshow('Harris', img) # show the image 
cv2.waitKey() 
+0

Вы говорите, что я могу перебирать угловые объекты cv2 и получить доступ к свойствам x и y? –

+0

Думаю, вы нарисовали точки, выполнив что-то вроде этого: img [dst> 0.01 * dst.max()] = [0,0,255] ', не позволили бы вам получить x и y пикселя? (не получили opencv здесь, чтобы проверить) – chris

+0

Я только что попробовал, углы не имеют явных свойств x и y, к которым можно получить доступ, как это –

0

я снова это через некоторое время и обнаружили, что метод Ши-Томази позволило гораздо более очевидным и, самое главное, более быстрый доступ к координатам угловых.

corners = cv2.goodFeaturesToTrack(image, 4, 0.5, 10) 

Будет заполнять углы, параметры, описанные в документах, затем;

Выведет координаты на итерацию.

Я уверен, что это возможно и через угловой гаррис, я просто не могу найти ничего, что описывает объект, который он создает.

Смежные вопросы