opencv3/C++ FLANN特征匹配方式
更新時間:2019年12月11日 15:38:29 作者:阿卡蒂奧
今天小編就為大家分享一篇opencv3/C++ FLANN特征匹配方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
使用函數(shù)detectAndCompute()檢測關(guān)鍵點并計算描述符
函數(shù)detectAndCompute()參數(shù)說明:
void detectAndCompute( InputArray image, //圖像 InputArray mask, //掩模 CV_OUT std::vector<KeyPoint>& keypoints,//輸出關(guān)鍵點的集合 OutputArray descriptors,//計算描述符(descriptors[i]是為keypoints[i]的計算描述符) bool useProvidedKeypoints=false //使用提供的關(guān)鍵點 );
match()從查詢集中查找每個描述符的最佳匹配。
參數(shù)說明:
void match( InputArray queryDescriptors, //查詢描述符集 InputArray trainDescriptors, //訓練描述符集合 CV_OUT std::vector<DMatch>& matches, //匹配 InputArray mask=noArray() //指定輸入查詢和描述符的列表矩陣之間的允許匹配的掩碼 ) const;
FLANN特征匹配示例:
#include<opencv2/opencv.hpp>
#include<opencv2/xfeatures2d.hpp>
using namespace cv;
using namespace cv::xfeatures2d;
//FLANN對高維數(shù)據(jù)較快
int main()
{
Mat src1,src2;
src1 = imread("E:/image/image/card2.jpg");
src2 = imread("E:/image/image/cards.jpg");
if (src1.empty() || src2.empty())
{
printf("can ont load images....\n");
return -1;
}
imshow("image1", src1);
imshow("image2", src2);
int minHessian = 400;
//選擇SURF特征
Ptr<SURF>detector = SURF::create(minHessian);
std::vector<KeyPoint>keypoints1;
std::vector<KeyPoint>keypoints2;
Mat descriptor1, descriptor2;
//檢測關(guān)鍵點并計算描述符
detector->detectAndCompute(src1, Mat(), keypoints1, descriptor1);
detector->detectAndCompute(src2, Mat(), keypoints2, descriptor2);
//基于Flann的描述符匹配器
FlannBasedMatcher matcher;
std::vector<DMatch>matches;
//從查詢集中查找每個描述符的最佳匹配
matcher.match(descriptor1, descriptor2, matches);
double minDist = 1000;
double maxDist = 0;
for (int i = 0; i < descriptor1.rows; i++)
{
double dist = matches[i].distance;
printf("%f \n", dist);
if (dist > maxDist)
{
maxDist = dist;
}
if (dist < minDist)
{
minDist = dist;
}
}
//DMatch類用于匹配關(guān)鍵點描述符的
std::vector<DMatch>goodMatches;
for (int i = 0; i < descriptor1.rows; i++)
{
double dist = matches[i].distance;
if (dist < max(2.5*minDist, 0.02))
{
goodMatches.push_back(matches[i]);
}
}
Mat matchesImg;
drawMatches(src1, keypoints1, src2, keypoints2, goodMatches, matchesImg, Scalar::all(-1), Scalar::all(-1), std::vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS);
imshow("output", matchesImg);
waitKey();
return 0;
}



以上這篇opencv3/C++ FLANN特征匹配方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
在Visual Studio中用C++語言創(chuàng)建DLL動態(tài)鏈接庫圖文教程
這篇文章主要介紹了在Visual Studio中用C++語言創(chuàng)建DLL動態(tài)鏈接庫圖文教程,本文詳細講解了DLL庫的創(chuàng)建過程,并給出了代碼示例,需要的朋友可以參考下2014-09-09
C數(shù)據(jù)結(jié)構(gòu)之雙鏈表詳細示例分析
以下是對c語言中的雙鏈表進行了詳細的分析介紹,需要的朋友可以過來參考下2013-08-08

