当前位置:网站首页>c++ opencv4.3 sift匹配
c++ opencv4.3 sift匹配
2020-11-08 16:17:00 【spiritboy】
c++ opencv4.3 sift匹配
main.cpp
int main()
{
vector<KeyPoint> keypoints1, keypoints2;
Mat img1,img2,descriptors1, descriptors2;
int numFeatures = 500;//特征点最大个数
int numlines = 50;//前20个匹配最好的点
string path1 = "1.jpg";//图片1
string path2 = "2.jpg";//图片2
getDescriptors(numFeatures, path1, keypoints1, descriptors1, img1);//绘制图片1特征点
getDescriptors(numFeatures, path2, keypoints2, descriptors2, img2);//绘制图片2特征点
drawMatch(img1, keypoints1, descriptors1, img2, keypoints2, descriptors2, numlines);//绘制匹配点
return 0;
}
utils.cpp
#include "utils.h"
// 获取特征点信息
void getDescriptors( int numFeatures, string path, vector<KeyPoint>& keypoints, Mat& descriptors, Mat& img) {
img = imread(path);
Ptr<SIFT> detector = SIFT::create(numFeatures);
if (detector.empty())
throw runtime_error("fail to create detector!");
//detect keypoints;
;
detector->detect(img, keypoints);
cout << "img:" << keypoints.size() << endl;
//compute descriptors for keypoints;
//Sift特征描述提取
cout << "< Computing descriptors for keypoints from images..." << endl;
detector->compute(img, keypoints, descriptors);
cout << endl << "Descriptors Size: " << descriptors.size() << " >" << endl;
cout << endl << "Descriptor's Column: " << descriptors.cols << endl << "Descriptor's Row: " << descriptors.rows << endl;
cout << ">" << endl;
//Draw And Match img1,img2 keypoints
Mat img_keypoints;
drawKeypoints(img, keypoints, img_keypoints, Scalar::all(-1), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
imshow(path, img_keypoints);
}
// 画匹配的特征点对
void drawMatch(Mat img1, vector<KeyPoint> keypoints1, Mat descriptors1, Mat img2, vector<KeyPoint> keypoints2, Mat descriptors2, int numlines) {
//暴力匹配
Ptr<DescriptorMatcher> descriptor_matcher = DescriptorMatcher::create("BruteForce");
vector<DMatch> matches;
descriptor_matcher->match(descriptors1, descriptors2, matches);
//挑选匹配的最好的前20个
nth_element(matches.begin(), matches.begin() + numlines-1, matches.end());
matches.erase(matches.begin() + numlines-1, matches.end());
//绘制匹配点连线
Mat img_matches;
drawMatches(img1, keypoints1, img2, keypoints2, matches, img_matches, Scalar::all(-1), Scalar::all(-1), vector< char>(), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
imshow("Mathc", img_matches);
waitKey(0);
}

opencv4.3下载地址
https://download.csdn.net/download/qq_26696715/12459477
有问题添加QQ群:686070107
版权声明
本文为[spiritboy]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/3337401/blog/4708236
边栏推荐
- Comics: looking for the best time to buy and sell stocks
- Summary of template engine
- rabbitmq(一)-基础入门
- SQL 速查
- vim-配置教程+源码
- We made a medical version of the MNIST dataset, and found that the common automl algorithm is not so easy to use
- 区块链周报:数字货币发展写入十四五规划;拜登邀请MIT数字货币计划高级顾问加入总统过渡团队;委内瑞拉推出国营加密交易所
- 我用 Python 找出了删除我微信的所有人并将他们自动化删除了
- 一分钟全面看懂forsage智能合约全球共享以太坊矩阵计划
- Interpretation of deepmind's latest paper: the causal reasoning algorithm in discrete probability tree is proposed for the first time
猜你喜欢

软件开发中如何与人协作? | 每日趣闻

Builder pattern

佛萨奇forsage以太坊智能合约是什么?以太坊全球滑落是怎么回事

On the software of express delivery cabinet and deposit cabinet under Windows

The first open source Chinese Bert pre training model in the financial field

小青台正式踏上不归路的第3天

Learn to record and analyze

关于update操作并发问题

Google's AI model, which can translate 101 languages, is only one more than Facebook

阿里云加速增长,进一步巩固领先优势
随机推荐
Leancloud changes in October
I used Python to find out all the people who deleted my wechat and deleted them automatically
The birth of a new integrated memory and computing chip is conducive to the application of artificial intelligence~
我们做了一个医疗版MNIST数据集,发现常见AutoML算法没那么好用
Comics: looking for the best time to buy and sell stocks
Arduino ide build esp8266 development environment, slow file download solution | esp-01 make WiFi switch tutorial, transform dormitory lights
Google's AI model, which can translate 101 languages, is only one more than Facebook
API生命周期的5个阶段
喜获蚂蚁offer,定级p7,面经分享,万字长文带你走完面试全过程
Application of four ergodic square of binary tree
vim-配置教程+源码
We made a medical version of the MNIST dataset, and found that the common automl algorithm is not so easy to use
[open source]. Net uses ORM to access Huawei gaussdb database
Elasticsearch learning one (basic introduction)
技术总监7年总结,如何进行正确的沟通?
Learn to record and analyze
腾讯:阿里的大中台虽好,但也不是万能的!
进入互联网得知道的必备法律法规有哪些?
The network adapter could not establish the connection
SQL quick query