OpenCV學習問題記錄(五)

2021-10-06 13:55:26 字數 2432 閱讀 7671

在特徵點檢測之後,需要描述特徵點位置、特徵等資訊,以便於後續匹配等工作的進行。

以下提供brisk和sift兩種演算法的特徵點描述演算法,opencv將演算法都封裝了,呼叫起來比較簡單;

注:sift演算法可能因為版權問題不能使用

#include

#include

#include

#include

#include

#include

#include

//sift所需標頭檔案

#include

//sift所需標頭檔案

using

namespace std;

void

desckeypoints1()

intmain()

注:主要的描述演算法及其原始碼

1、 cv::ptr<:descriptorextractor> descriptor = cv::brisk::

create()

; cv::mat descbrisk;

descriptor-

>

compute

(imggray, kptsbrisk, descbrisk)

;imggray:輸入的灰度影象&cv::mat

kptbrisk:輸入的特徵點&vector<:keypoint>

descbrisk:輸出的特徵點描述矩陣&cv::mat

#include

#include

#include

#include

#include

#include

#include

"structio.hpp"

using

namespace std;

void

matchdescriptors

(cv::mat &imgsource, cv::mat &imgref, vector<:keypoint>

&kptssource, vector<:keypoint>

&kptsref, cv::mat &descsource, cv::mat &descref,

vector<:dmatch>

&matches, string descriptortype, string matchertype, string selectortype)

else

if(matchertype.

compare

("mat_flann")==

0)matcher = cv::descriptormatcher::

create

(cv::descriptormatcher::flannbased)

;//快速最近鄰逼近搜尋函式

//... todo : implement flann matching

cout <<

"flann matching";}

// perform matching task

if(selectortype.

compare

("sel_nn")==

0)else

if(selectortype.

compare

("sel_knn")==

0)}// todo : filter matches using descriptor distance ratio test

}// visualize results

cv::mat matchimg = imgref.

clone()

; cv::

drawmatches

(imgsource, kptssource, imgref, kptsref, matches,

matchimg, cv::scalar::

all(-1

), cv::scalar::

all(-1

), vector<

char

>()

, cv::drawmatchesflags::draw_rich_keypoints)

; string windowname =

"matching keypoints between two camera images (best 50)"

; cv::

namedwindow

(windowname,7)

; cv::

imshow

(windowname, matchimg)

; cv::

waitkey(0);}

特徵描述匹配方法的總體架構

OpenCV學習問題記錄(一)

int nrows 480,ncols 640 cv mat m1 8u m1 8u.create nrows,ncols,cv 8uc1 此刻表示建立乙個480x640大小的畫素塊,每個畫素都是單通道每個通道的位數都是8位,乙個位元組的。上述cv 8uc1中的8表示8位 uc表示uchar型別 1...

opencv編譯相關問題記錄

在編譯opencv時,一般都是編譯成為動態庫,但是有時為了方便移植或者在其他地方安裝,會需要將其編譯成靜態庫的形式。這個時候只需要將cmake的 build shared libs 引數設為 off即可 可以採用如下命令來進行編譯 cmake d cmake build type release d...

ios 學習 問題 記錄

一 重新加入storyboard 黑屏並且提示以下錯誤 解決方案 1 在general編輯標籤中,deployment info 部分,main inte ce 彈出的標籤中選擇對應的storyboard 2 新增檢視控制器 在storyboard 的identity inspector 中選擇你需...