Opencv學習筆記(三) 特徵點匹配

2021-07-27 19:30:00 字數 1370 閱讀 6461

在我們提取到帶特徵點和得到特徵描述符後,接下來的工作就是將這些個特徵點進行匹配。

一、特徵點匹配位於feature2d的模組中所以在使用的時候應該在標頭檔案中加入:

#include\features2d\features2d.hpp>
在這個模組中用有三個類:

它們的繼承關係如下:

對於特徵點匹配有兩種方法:

(1) brute-force matcher (cv::bfmatcher)

brute-force matcher就是用暴力方法找到點集一中每個descriptor在點集二中距離最近的 descriptor。這個比較容易理解,這裡我們就不具體介紹了。

使用方法:

//bfmatcher 暴力匹配

vector

bfmatches;

ptrbfmatcher = descriptormatcher::create(2);

//ptrbmatcher = bfmatcher::create();

bfmatcher->match(descriptors1, descriptors2, bfmatches);

(2)flann-based matcher (cv::flannbasedmatcher)

flann-based matcher 使用快速近似最近鄰搜尋演算法尋找(用快速的第三方庫近似最近鄰搜尋演算法)

使用方法:

//flannbasedmatcher:

vector

flannmatches;

ptrflannmatcher = flannbasedmatcher::create();

flannmatcher->match(descriptors1, descriptors2, flannmatches);

二、兩種方法的比較:

此外,使用特徵提取過程得到的特徵描述符(descriptor)資料型別有的是float型別的,比如surfdescriptorextractor,

siftdescriptorextractor,有的是uchar型別的,比如說有orb,briefdescriptorextractor。對應uchar型別的匹配方式有:bruteforce,bruteforce。所以orb和brief特徵描述子只能使用bruteforce匹配法。

關於匹配的一些處理技巧參見:

特徵點提取opencv

opencv中提供了harris角點檢測的介面,即cv cornerharris 缺陷 角點是畫素級別的,速度較慢 dst cv2.cornerharris gray,2,3,0.04 img 資料型別為 float32 的輸入影象 blocksize 角點檢測中要考慮的領域大小 ksize sob...

OpenCV2 3 1特徵點提取

今天做特徵點匹配實驗,從網上找來了surf特徵點檢測程式,除錯也調通了,但是執行之後就是沒有結果出來,還會出現執行之後程式崩潰的問題,後來試了好多遍,發現是由於lib檔案有問題,雖然在屬性裡已經新增了,但是仍然鏈結不上。解決方法是在程式開始新增lib檔案,如下所示。include opencv2 o...

opencv特徵點匹配(暴力匹配優化)

1.knnmatch 方法,而k 1,返回一對匹配子,這個方法只返回最接近的距離的一對匹配子,當有足夠多的匹配子的時候,這種方法通常能夠產生最好的結果和最小的誤差。2.dmatch類 struct cv exports w dmatch 1 cv wrap dmatch int queryidx,i...