ORB特征点检测和匹配
来源:互联网 发布:淘宝助理有什么功能 编辑:程序博客网 时间:2024/05/18 16:39
#include <stdio.h>#include <iostream>#include "opencv2/core/core.hpp"#include "opencv2/features2d/features2d.hpp"#include "opencv2/highgui/highgui.hpp"#include <iostream>#include <vector>#include <QtDebug>using namespace cv;using namespace std;char* image_filename2 = "F:/opencv-3.1.0/pictures/test2.bmp";char* image_filename1 = "F:/opencv-3.1.0/pictures/test1.bmp";int main( int argc, char** argv ){ Mat img_1 = imread(image_filename2); Mat img_2 = imread(image_filename1); if (!img_1.data || !img_2.data) { cout << "error reading images " << endl; return -1; } //ORB orb; Ptr<ORB> orb = ORB::create(500,1.2f,8,31,0,2,ORB::HARRIS_SCORE,31,20); vector<KeyPoint> keyPoints_1, keyPoints_2; Mat descriptors_1, descriptors_2;#if 0 orb->detect(img_1,keyPoints_1, Mat()); for(int i=0;i<keyPoints_1.size();i++) { qDebug("keypoint[%d] x:%f y:%f size:%d angle:%f\n", i, keyPoints_1[i].pt.x, keyPoints_1[i].pt.y, keyPoints_1[i].size, keyPoints_1[i].angle); }#endif orb->detectAndCompute(img_1, Mat(), keyPoints_1, descriptors_1); orb->detectAndCompute(img_2, Mat(), keyPoints_2, descriptors_2); qDebug("keyPoints1 size:%d\n", keyPoints_1.size()); qDebug("keyPoints2 size:%d\n", keyPoints_2.size()); flann::Index flannIndex(descriptors_2,flann::LshIndexParams(20,10,2),cvflann::FLANN_DIST_HAMMING); Mat matchIndex(descriptors_1.rows,2,CV_32SC1), matchDistance(descriptors_1.rows,2,CV_32FC1); flannIndex.knnSearch(descriptors_1,matchIndex,matchDistance,2,flann::SearchParams()); int goodMatchsNum=0; std::vector< DMatch > good_matches; for(int i=0;i<matchDistance.rows;i++) { if (matchDistance.at<float>(i,0)<0.6*matchDistance.at<float>(i,1)) { DMatch dmatches(i,matchIndex.at<int>(i,0), matchDistance.at<float>(i,0)); good_matches.push_back( dmatches); goodMatchsNum++; } } cout<<goodMatchsNum<<endl; //-- Draw only "good" matches Mat img_matches; drawMatches( img_1, keyPoints_1, img_2, keyPoints_2, good_matches, img_matches, Scalar::all(-1), Scalar::all(-1), vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS ); //-- Show detected matches imshow( "Good Matches", img_matches ); for( int i = 0; i < good_matches.size(); i++ ) { qDebug( "-- Good Match [%d] Keypoint 1: %d -- Keypoint 2: %d \n", i, good_matches[i].queryIdx, good_matches[i].trainIdx ); } waitKey(0); return 0; }
阅读全文
0 0
- ORB特征点检测和匹配
- OpenCV中ORB特征点检测和匹配简单用法
- ORB特征点检测与匹配
- ORB 特征点检测匹配算法
- ORB特征点检测
- ORB特征点检测
- ORB特征点检测
- ORB特征点检测
- ORB特征点检测
- ORB特征点检测
- ORB特征点检测
- ORB特征点检测
- ORB特征点检测
- ORB特征点检测
- ORB特征检测与匹配
- ORB 特征检测与匹配
- 特征点检测和匹配
- OpenCV特征点检测------ORB特征
- GitBook
- C#练习——判断任意一个整数是否为质数、1-100质数求和以及1-100的整数求和
- makefile学习(二)--Makefile 总述
- 手把手带你定制自己的nginx rpm包
- 同步并发操作
- ORB特征点检测和匹配
- 阿里、百度、搜狐等互联网公司面试经验总结!
- express-11-ejs
- 深入理解python中的闭包和装饰器
- 扛水泥的技法与实践-----《相机篇1》
- 7.8 Hibernate:内置生成器 – select
- JVM优化——针对“垃圾回收”的失效,带来的性能降低和内存溢出
- Android7.0 使用系统相册打开指定图片
- 独立scope及其绑定策略