特征匹配主要是基于两种相似度较高的图片,通过opencv里面提供的特征匹配方法来进行特征点之间的匹配和映射
特征点由关键点和描述子两部分组成。例如:在一张图像中计算SIFT特征点时,是指提取SIFT关键点,并计算SIFT描述子两件事。
关键点是指特征点在图像里的位置,有些特征点还具有方向、大小等信息。描述子是指一个向量,描述该关键点周围像素的信息
按照外观相似特征应该有相似的描述子的原则设计
SIFT(尺度不变性)作为最经典的特征提取算法,充分考虑图像变换过程中出现的光照、尺度、旋转等变化。
但计算量较大,实时性不好。
FAST关键点(没有描述子)考虑适当降低精度和鲁棒性,以提升计算的速度,属于特别快的一种特征点。
ORB特征目前看来非常具有代表性的实时图像特征,它改进了FAST检测子不具有方向性的问题,并采用速度极快的二进制描述子BRIEF;
因此,ORB在保持特征子具有旋转、尺度不变性的同时,在速度方面也有了很大的提升
1.计算检测关键点并计算描述符
detectAndCompute(InputArray img,bool useProvidedKeypoints=false)
useProvidedKeypoints:决定当前是探测关键点还是计算描述符,为true时执行compute功能;为false时,执行detect功能,探测关键点
点击查看代码
import cv2
img_m=cv2.imread("data1/1.png",0)
sift=cv2.SIFT_create()
kp2,des2=sift.detectAndCompute(img_m,None,useProvidedKeypoints=False) #useProvidedKeypoints决定当前是探测关键点还是计算描述符,
# useProvidedKeypoints为true时,执行compute功能,计算描述符;为false时,执行detect功能,探测关键点
res_r=cv2.drawKeypoints(img_m,kp2,img_m,color=(0,255,0),flags=0)
cv2.imshow('picture2',res_r)
cv2.waitKey(0)