FLANN和SURF搭配动态匹配特征点
来源:互联网 发布:js中valueof 编辑:程序博客网 时间:2024/05/22 01:30
特征匹配的结果会得到两个特征集合的对应关系列表。第一组特征集被称为训练集,第二组被称为查询集。FLANN在调用匹配函数之前,为了提高匹配速度,训练一个匹配器。训练阶段是为了优化cv::FlannBasedMatcher的性能。train类将会建立特征集的索引树。
而对于暴力匹配,train类不需要做什么,因为没有预处理。
FLANN和SURF搭配匹配特征点
knnMatch()找每个特征的K近邻匹配
效率不够高,帧率很低。参考《opencv3编程入门》
#include<opencv2/opencv.hpp>#include<opencv2/features2d/features2d.hpp>#include<opencv2/xfeatures2d/nonfree.hpp>#include<opencv2/highgui/highgui.hpp>#include<iostream>using namespace std;using namespace cv;using namespace cv::xfeatures2d;int main(){ Mat trainImage = imread("3.jpg",1); Mat trainImage_gray; imshow("原始图",trainImage); cvtColor(trainImage,trainImage_gray,CV_BGR2GRAY); vector<KeyPoint>train_keypoint; Mat trainDescriptor; Ptr<SurfFeatureDetector> Detector = SurfFeatureDetector::create(80); Detector->detectAndCompute(trainImage_gray,Mat(),train_keypoint,trainDescriptor); vector<Mat> train_desc_collection(1,trainDescriptor); FlannBasedMatcher matcher; matcher.add(train_desc_collection); matcher.train(); VideoCapture cap(0); unsigned int frameCount = 0; while (char(waitKey(1) != 'q')) { int64 time0 = getTickCount(); Mat testImage, testImage_gray; cap >> testImage; if (testImage.empty()) continue; cvtColor(testImage,testImage_gray,CV_BGR2GRAY); vector<KeyPoint>test_keypoint; Mat testDescriptor; Detector->detectAndCompute(testImage_gray,Mat(),test_keypoint,testDescriptor); vector<vector<DMatch>>matches; matcher.knnMatch(testDescriptor,matches,2); vector<DMatch>goodMatches; for (unsigned int i = 0; i < matches.size(); i++) { if (matches[i][0].distance < 0.6*matches[i][1].distance) goodMatches.push_back(matches[i][0]); } Mat dstImage; drawMatches(testImage,test_keypoint,trainImage,train_keypoint,goodMatches,dstImage); imshow("匹配窗口",dstImage); cout << "当前帧率为" << getTickFrequency() / (getTickCount() - time0) << endl; } return 0;}
阅读全文
0 0
- FLANN和SURF搭配动态匹配特征点
- OpenCV实现摄像机标定和像素转换,surf寻找特征点,FLANN匹配算子进行匹配
- opencv特征点算法surf和最近邻算法flann
- surf特征+FLANN特征匹配+knn筛选匹配点+单应性矩阵映射
- OpenCV图像Surf与flann特征点
- FLANN进行特征点匹配
- 利用FLANN SURF匹配
- Surf特征匹配点提纯
- opencv3中FLANN结合SURF进行关键点的描述和匹配
- 学习OpenCV——Surf(特征点篇)&flann
- 学习OpenCV——Surf(特征点篇)&flann
- 学习OpenCV——Surf(特征点篇)&flann
- 学习OpenCV——Surf(特征点篇)&flann
- 使用FLANN进行特征点匹配
- 使用FLANN进行特征点匹配
- Emgucv SURF特征点的寻找和匹配
- OpenCV3中的SURF特征点的寻找和匹配
- 【OpenCV】OpenCV3中的SURF特征点的寻找和匹配
- samba
- 如何将一个十进制数转换成4位十进制数表示
- 使用C/C++编写Python扩展库
- 使用Nginx完成负载均衡
- Android Binder线程
- FLANN和SURF搭配动态匹配特征点
- 程序员的高考试卷B
- nginx小记
- 来说说Unity观察者(Observer)模式
- oracle 关键字 wm_concat 将多条数据合并成一条
- 2017.06.06学习总结
- Git SVN 工作空间还原
- 持续继承win+jenkins+cvs+weblogic
- CocoaPods创建自己的开源库和私有库