当前位置:网站首页>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
边栏推荐
- Builder pattern
- STM32CubeIDE下载安装-GPIO基本配置操作-Debug调试(基于CMSIS DAP Debug)
- Station B STM32 video learning
- LiteOS-消息队列-实战
- 2020-11-05
- GopherChina 2020大会
- Workers, workers soul, draw lifelong members, become a person!
- I used Python to find out all the people who deleted my wechat and deleted them automatically
- The first open source Chinese Bert pre training model in the financial field
- Builder pattern
猜你喜欢

DeepMind 最新论文解读:首次提出离散概率树中的因果推理算法

What are the necessary laws and regulations to know when entering the Internet?

awk实现类sql的join操作

小米、OPPO在欧洲市场继续飙涨,小米更是直逼苹果

Welcome to offer, grade P7, face-to-face sharing, 10000 words long text to take you through the interview process

Improvement of rate limit for laravel8 update

Learn to record and analyze

The network adapter could not establish the connection

Summary of template engine

How to solve the difference between NAT IP and port IP
随机推荐
How does the system response time and throughput change with the increase of concurrency pressure during performance pressure testing
后端程序员必备:分布式事务基础篇
Gopherchina 2020 Conference
小青台正式踏上不归路的第3天
WebGL 水波及焦散(刻蚀)的渲染总结
Arduino ide build esp8266 development environment, slow file download solution | esp-01 make WiFi switch tutorial, transform dormitory lights
Tencent, which is good at to C, how to take advantage of Tencent's cloud market share in these industries?
浅谈OpenGL之DSA
.NET 大数据量并发解决方案
Xiaoqingtai officially set foot on the third day of no return
The birth of a new integrated memory and computing chip is conducive to the application of artificial intelligence~
Elasticsearch learning one (basic introduction)
laravel8更新之维护模式改进
2020-11-05
性能压测时,并发压力增加,系统响应时间和吞吐量如何变化
API生命周期的5个阶段
laravel8更新之速率限制改进
Build simple business monitoring Kanban based on Alibaba cloud log service
3、 The parameters of the function
Improvement of maintenance mode of laravel8 update