【基础】特征匹配

1.openCV实现Brute-Force 蛮力匹配

图片1

normType:是用来指定要使用的距离测试类型。方式不同的算法对应的默认值不同。

crossCheck:默认值是False。如果设置为True,匹配条件会更加严格。举例来说,如果A图像中的i点和B图像中的j点距离最近,并且B中的j点到A中的i点距离也最近,相互匹配,这个匹配结果才会返回。

2.程序演示

import cv2  
import numpy as np  
import matplotlib.pyplot as plt  

img1 = cv2.imread('book.jpg',0)  
img2 = cv2.imread('books.jpg',0)  
sift = cv2.SIFT_create()  #SIFT(Scale-invariant feature transform:尺度不变特征变换)用来侦测与描述影像中的局部性特征  
kp1,des1 = sift.detectAndCompute(img1,None)  
kp2,des2 = sift.detectAndCompute(img2,None)  
bf = cv2.BFMatcher(crossCheck=True)  
matches = bf.match(des1,des2)  
matches = sorted(matches,key=lambda x:x.distance)  
# sorted(iterable:表示指定的序列,key:参数的自定义排序规则,reverse:指定参数升序或降序排列,默认为False降序)
#lambda:是一个自定义函数

img3 = cv2.drawMatches(img1,kp1,img2,kp2,matches[:10],None,flags=2)  #matches【:10】 : 表示序列前十
plt.imshow(img3)

图片1