大部分转自 https://blog.csdn.net/ssw_1990/article/details/72629655
OpenCV官方文档:https://docs.opencv.org
参考文献:Feature Matching:http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_matcher/py_matcher.html#matcher
https://docs.opencv.org/master/dc/dc3/tutorial_py_matcher.html
一. Brute-Force的匹配基础
蛮力匹配器:首先在第一幅图像中选取一个关键点然后依次与第二幅图像的每个关键点进行(描述符)距离测试,最后返回距离最近的关键点。函数原型 BFMatcher::BFMatcher(int normType=NORM_L2, bool crossCheck=false),构造函数如下所示:
- normType:用来指定要使用的距离测试类型。默认值为cv2.Norm_L2,这很适合SIFT和SURF等(c2.NORM_L1也可)。对于使用二进制描述符的ORB、BRIEF和BRISK算法等,要使用cv2.NORM_HAMMING,这样就会返回两个测试对象之间的汉明距离。如果ORB算法的参数设置为WTA_K==3或4,normType就应该设置成cv2.NORM_HAMMING2。
- crossCheck:默认值为False。如果设置为True,匹配条件就会更加严格,只有到A中的第
个特征点与B中的第
个特征点距离最近,并且B中的第
个特征点到A中的第
个特征点也是最近时才会返回最佳匹配
,即这两个特征点要互相匹配才行。
BFMatcher对象有两个方法BFMatcher.m