2015-04-02 2 views
1

Я использую opencv-PythonКак создать ключевые точки для вычисления SIFT?

Я определил угловые точки, используя cv2.cornerHarris. Выходной сигнал имеет тип «dst»

Мне нужно вычислить функции SIFT угловых точек. Вход sift.compute() должен быть типа «Keypoint»

Я не могу понять, как использовать cv2.KeyPoint()

Как мне это сделать?

Спасибо :)

ответ

0

Я думаю, вы полностью ошиблись. Выходной сигнал типа «dst» -> Помните, что dst, который возвращается функцией cv2.cornerHarris - это матрица с плавающей запятой, содержащая углы Харриса, обнаруженные на изображении.

Пример кода, который я использовал в python, здесь для вычисления углов в изображении. Вы можете использовать возвращаемые данные и преобразовать их в тип KeyPoints. Обратите внимание: структура ключевой точки определяется как OpenCV KeyPoint Structure, и каждая ключевая точка задается координатами изображения 2d координат типа Point2f. Просто конвертируйте каждый обнаруженный угол в Point2f и используйте его для вашей просеивающей функции.

#sample code to read image and estimate the harris corner. 
import cv2 
import numpy as np 


def cvComputeHarrisCorner(img):                
    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]              
    return img                    


def main():                     
    img = cv2.imread('img.jpg')         
    cvComputeHarrisCorner(img)                  
    cv2.imshow('dst',img)                 
    if cv2.waitKey(0) & 0xff == 27:               
     cv2.destroyAllWindows()                

if __name__ == "__main__":             
    main()                     

Вместо того, чтобы объяснить все, что вам нужно здесь, я бы направить вас к этой обучающей программе OpenCV Python, который очень хорошо написано и объяснено в багажнике. Пройдите их, и вы постепенно узнаете о концепции.

OpenCV Python Tutorials

+0

, пожалуйста, включите код для преобразования каждого обнаруженного угла в Point2f –

0

Харрис обратный детектор ДСТ, которые имеют одинаковую форму с вашим изображением. Харрис отмечает, что там, где он считает угол. Итак, вы должны извлечь keypoint из dst.

def harris(self, img): 
    ''' 
    Harris detector 
    :param img: an color image 
    :return: keypoint, image with feature marked corner 
    ''' 

    gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
    gray_img = np.float32(gray_img) 
    dst = cv2.cornerHarris(gray_img, 2, 3, 0.04) 
    result_img = img.copy() # deep copy image 

    # Threshold for an optimal value, it may vary depending on the image. 
    result_img[dst > 0.01 * dst.max()] = [0, 0, 255] 

    # for each dst larger than threshold, make a keypoint out of it 
    keypoints = np.argwhere(dst > 0.01 * dst.max()) 
    keypoints = [cv2.KeyPoint(x[1], x[0], 1) for x in keypoints] 

    return (keypoints, result_img) 
Смежные вопросы