본문 바로가기

OpenCV

custom keypoint를 설정해 descriptor를 얻는 방법 / sift.compute( )

320x100
320x100

 

 

 

 

 앞선 글에서는 keypoint 추출을 SIFT로 했었는데 이를 custom keypoints로 대체해 사용하는 방법에 대해 정리하고자 한다. cv2.KeyPoint( )를 사용해서 keypoint를 정의해 사용해주면 된다. 다음의 예제에선 내가 만든 모델이 keypoint 좌표로 (370, 200)을 뽑아냈다 가정한 상태로 진행했다.

import cv2

imageA = cv2.imread('./pano_1.jpeg')

grayA = cv2.cvtColor(imageA,cv2.COLOR_BGR2GRAY)

keypoint_x = 370
keypoint_y = 200
keypoint_size = 100
keypoint = cv2.KeyPoint(keypoint_x, keypoint_y, keypoint_size)

sift = cv2.xfeatures2d.SIFT_create()
keypoint, descriptor = sift.compute(grayA, [keypoint])

res = cv2.drawKeypoints(imageA, keypoint, imageA.copy(), flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow('keypoint', res)
  • [Line 7 ~ 10]
    cv2.KeyPoint( )에는 여러 파라미터들이 있는데 이 중 x, y, size만 설정해주면 에러없이 실행된다.
  • [Line 12 ~ 13 ]
    설정한 keypoint 좌표를 중심으로 descriptor를 계산해 그 결과를 얻는 과정이다.
    descriptor는 sift.sompute( )를 사용하는 트릭(?)을 통해 계산했다.
  • [Line 15 ~ 16]
    설정한 keypoint를 그리는 과정이다. 
    flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS 로 설정해주면
    keypoint가 keypoint_size에 맞게 그려진다.

 

다음은 실행 결과이다.

 

 

 

[ 참고 사이트 ]

http://blog.naver.com/PostView.nhn?blogId=samsjang&logNo=220643446825&categoryNo=66&parentCategoryNo=0&viewDate=&currentPage=2&postListTopCurrentPage=&from=postList&userTopListOpen=true&userTopListCount=10&userTopListManageOpen=false&userTopListCurrentPage=2