OpenCV中的ORB算法
我们必须创建一个ORB对象,通过函数 cv.ORB_create() 。或者使用 feature2d公共接口。它有多个可选参数。最有用的几个,是nFeatures,它表示要保留特征的最大数量(默认是500),scoreType 表示是在为特征点排序时,是要用哈里斯的方式来计分还是使用FAST算法来计分(默认是哈里斯的计分算法)等等。还有个参数,WTA_K 决定产生有方向的BRIEF描述符的每个元素点的数目。默认情况下是两个,因为两点决定一条线。这种情况下,使用汉明距离(译者注:NORM_HAMMING distance,汉明距离)用于匹配。如果WTA_K 是 3 或者 4,那就需要取3 或者 4 个点来产生 BRIEF描述符,那么匹配距离就被定义为二类汉明距离(NORM_HAMMING2)。
代码演示:
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('head.jpg',0)
# Initiate ORB detector
orb = cv2.ORB_create()
# find the keypoints with ORB
kp = orb.detect(img,None)
# compute the descriptors with ORB
kp,des = orb.compute(img,kp)
# draw only keypoints location,not size and orientation
img2 = cv2.drawKeypoints(img,kp,None,color=(0,255,0),flags=0)
plt.imshow(img2)
plt.show()