opencv 特徵提取以及特徵匹配

2021-08-28 16:13:53 字數 2384 閱讀 4134

用到的庫檔案

#include

#include

using namespace std;

//opencv 特徵檢測模組

#include

#include

#include

提取影象中的特徵   關鍵點   與    關鍵點的描述子,分別用到了opencv庫中的cv::featuredetector和cv::descriptorextractor來計算

1、讀取需要處理的兩幅rgbd影象:

cv::mat rgb1,rgb2,depth1,depth2;

rgb1 = cv::imread("./data3/rgb1.png");

rgb2 = cv::imread("./data3/rgb2.png");

depth1 = cv::imread("./data3/depth1.png",-1);

depth2 = cv::imread("./data3/depth2.png",-1);

2、隨後宣告 特徵提取起以及描述子提取器

cv::ptr_detector;

cv::ptr_descriptor;

3、宣告了兩個提取器之後,開始構建,在構建之前還需要在初始化nonfree模組(以sift特徵點為例):

cv::initmodule_nonfree();

_detector = cv::featuredetector::create("gridsift");

_descriptor = cv::descriptorextractor::create("sift");

4、提取兩幅影象的關鍵點:

vectorkp1,kp2; //關鍵點

_detector->detect(rgb1,kp1);   //提取關鍵點

_detector->detect(rgb2,kp2);

cout<<"key points of two images:"<5、顯示剛才計算得到的關鍵點:

cv::mat imgshow;

cv::drawkeypoints(rgb1,kp1,imgshow,cv::scalar::all(-1),cv::drawmatchesflags::draw_rich_keypoints);

cv::imshow("keypoints",imgshow);

cv::imwrite("./data3/keypoints.png",imgshow);

cv::waitkey(0);  //暫停等待乙個按鍵

6、計算描述子:

cv::mat desp1,desp2;

_descriptor->compute(rgb1,kp1,desp1);

_descriptor->compute(rgb2,kp2,desp2);

由上述過程計算得到的關鍵點和描述子之後,需要對兩幀影象進行匹配:

1、匹配描述子

vectormatches;

cv::flannbasedmatcher matcher;

matcher.match(desp1,desp2,matches);

cout<<"find total "<2、顯示匹配的特徵

cv::mat imgmatches;

cv::drawmatches(rgb1,kp1,rgb2,kp2,matches,imgmatches);

cv::imshow("matches",imgmatches);

cv::imwrite("./data3/matches.png",imgmatches);

cv::waitkey(0);

3、誤匹配處理,處理準則:去掉大於最小距離四倍的匹配

vectorgoodmatches;

double mindis = 9999;

for(size_t i = 0; i < matches.size(); i++)

for(size_t i = 0; i < matches.size(); i++)

4、顯示處理過後的匹配結果

cout<<"good match = "

cv::imshow("good matches",imgmatches);

cv::imwrite("./data3/good_matches.png",imgmatches);

cv::waitkey(0);

Opencv特徵提取

最近復現 講第 講關於 的 特徵提取的原理懂了,opencv裡的實現方式,特別是如何構造特徵點提取函式 描述子函式和暴力匹配等方法的函式不熟悉,因此翻到了 opencv程式設計入門 第三版了解了解,對整個流程有了個概念。我發現我的opencv版本不能構建fast的描述子,sift更是沒有了,sift...

特徵工程 特徵提取

特徵提取 將任意資料 如文字或影象 轉換為可用於機器學習的數字特徵 注 特徵值化是為了計算機更好的去理解資料 字典特徵提取 作用 對字典資料進行特徵值化 dictvectorizer.get feature names 返回類別名稱 from sklearn.feature extraction i...

文字特徵 特徵提取(一)

本文的內容主要來自於quora上的乙個問題,這裡簡單的做一下總結,感興趣的可檢視原帖 為了使用機器學習方法處理文字資料,需要找到適合的文字表示形式,對於傳統機器學習方法而言,常用的一種表示方法是將文件轉換為文件 詞項矩陣 document term matrix 具體就是將多篇文件轉換為資料幀 da...