FLANN Based SURF特徵匹配

2021-09-18 01:44:38 字數 3563 閱讀 4739

官網教程

#include

#include

#include

#include

using namespace cv;

using namespace std;

using namespace cv:

:xfeatures2d;

intmain()

//計算 keypoints and descriptor

int minhessian =

400;

ptr detector = surf:

:create

(minhessian)

; std:

:vector keypoint1, keypoint2;

mat descriptor1, descriptor2;

detector->

detectandcompute

(img1,

noarray()

, keypoint1, descriptor1)

; detector->

detectandcompute

(img2,

noarray()

, keypoint2, descriptor2)

;//匹配

ptr:descriptormatcher> matcher = descriptormatcher:

:create

(descriptormatcher:

:flannbased)

;// 基於flann匹配

vector

:vector> knn_matches;

// 因為要為每個descriptor找到最佳的k 個匹配, 對於每個descriptor來說,又是vector

matcher->

knnmatch

(descriptor1, descriptor2, knn_matches,2)

;//篩選最好的

const

float ratio_thresh =

0.7f

; vector good_matchers;

for(

int i=

0; i

size()

; i++)}

//展示

畫特徵點、匹配( feature2d.hpp )

void cv::drawkeypoints

( 	

inputarray image,

// source image

const std:

:vector< keypoint >

& keypoints,

// keypoints from the source image

inputoutputarray outimage,

// 輸出影象

const scalar & color = scalar:

:all(-

1),// color for keypoints ,default (-1)隨機

drawmatchesflags flags = drawmatchesflags:

:default //畫圖的方式,預設就行, 或者not_draw_single_points:沒有匹配的點不畫出來

)

void cv::drawmatches

( 	

inputarray img1,

//first source image

const std:

:vector< keypoint >

& keypoints1,

//keypoints from the first source image.

inputarray img2,

// second source image.

const std:

:vector< keypoint >

& keypoints2,

// keypoints from the second source image.

const std:

:vector< dmatch >

& matches1to2,

// 兩源圖之間的匹配

inputoutputarray outimg,

//輸出影象

const scalar & matchcolor = scalar:

:all(-

1),// 隨機顏色

const scalar & singlepointcolor = scalar:

:all(-

1),// 沒有匹配的點的顏色

const std:

:vector<

char

>

& matchesmask = std:

:vector<

char

>()

,// mask決定哪些點畫,如果為空,全都畫

drawmatchesflags flags = drawmatchesflags:

:default  //畫圖方式,如上api

)

從候選匹配中,為每個匹配找到最佳的k個匹配

void cv::descriptormatcher::knnmatch

( 	

inputarray querydescriptors,

// 第一張的匹配

inputarray traindescriptors,

// 第二張的匹配

std:

:vector< std:

:vector< dmatch >

>

& matches,

// 存的匹配結果

int k,

// 前k個最佳匹配,

inputarray mask =

noarray()

, bool compactresult = false

)const

特基礎特基礎的東西隨便寫寫

include include include using namespace std 定義人類 person 資料成員 m strname 成員函式 attack class person 定義士兵類 soldier 士兵類公有繼承人類 資料成員 m strname 成員函式 attack cla...

斯特林數 斯特林反演

第一類stirling數 s n,m 也可記為 beginn m end 第一類stirling分為無符號第一類stirling數 s u n,m 和帶符號第一類stirling數 s s n,m 他們分別表現為其公升階函式和降階函式的各項係數,形式如下 x x cdot x 1 cdot x 2 ...

希爾伯特變換 希爾伯特變換

希爾伯特變換 ht 是指描述乙個以實數值載波做調製的訊號之複數包絡,相移是通過希爾伯特變換器來實現的,訊號經希爾伯特變換後在頻域各頻率分量的幅度保持不變,但相位出現90度相移,正頻率之後90度負頻率超前90度,希爾伯特變換器又成為90度相位器。用希爾伯特變換描述幅值調值或相位調值的包絡,瞬時頻率和瞬...