用到的庫檔案
#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版本不能構建fast的描述子,sift更是沒有了,sift... 特徵提取 將任意資料 如文字或影象 轉換為可用於機器學習的數字特徵 注 特徵值化是為了計算機更好的去理解資料 字典特徵提取 作用 對字典資料進行特徵值化 dictvectorizer.get feature names 返回類別名稱 from sklearn.feature extraction i... 本文的內容主要來自於quora上的乙個問題,這裡簡單的做一下總結,感興趣的可檢視原帖 為了使用機器學習方法處理文字資料,需要找到適合的文字表示形式,對於傳統機器學習方法而言,常用的一種表示方法是將文件轉換為文件 詞項矩陣 document term matrix 具體就是將多篇文件轉換為資料幀 da...Opencv特徵提取
特徵工程 特徵提取
文字特徵 特徵提取(一)