本文内容是对Opencv官方文档的学习笔记
蛮力(Brute0Force)匹配
原理
蛮力匹配很简单,首先在第一幅图像中选取一个关键点,然后依次与第二幅图像的每一个关键点进行(描述符)距离测试,最后返回距离最近的关键点。
相关函数介绍
在这里由于有不同版本的OpenCV,下面将要涉及到的函数也会有差别,在这里先列出作者的OpenCV版本为3.4.1。
对于BF匹配器,我们需要用 cv2.BFMatcher()函数创建一个BFMatcher对象,他有两个可选参数:
normType:它是用来指定要使用的距离测试类型。
默认值为 cv2.NORM_L2。这很适合SIFT和SURF等(cv2.NORM_L1也可以)。2.对于使用二进制描述符的ORB,BRIEF,BRISK等算法,要使用 cv2.NORM_HAMMING,这样就会返回两个测试对象之间的汉明距离,如果ORB算法的参数设置为VTA_K==3或者4,normType就应该设置为cv2.NORM_HAMMING2
crossCheck:为布尔变量,默认值为False。如果设置为True,匹配条件就会更加严格,假设A和B是两幅图像,只有当A中的第i个特征点与B中的第j个特征点距离最近,并且B中的第j个特征点到A中的第i个特征点也是最近(A中没有其他点到j的距离更近)时才会返回最佳匹配(i,j),也就是说这两个特征点要互相匹配才可以。
BFMatcher对象具有两个方法:
BFMatcher.match():返回最佳匹配。
BFMatcher.knnMatch():为每个关键点返回k个最佳匹配(将序排列之后取前k个),其中k是用户自己设定的。