当前位置:网站首页>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
边栏推荐
- Golang system ping program to detect the surviving host (any permission)
- Flink from introduction to Zhenxiang (10. Sink data output elasticsearch)
- [Python 1-6] Python tutorial 1 -- number
- Golang ICMP Protocol detects viable hosts
- On the software of express delivery cabinet and deposit cabinet under Windows
- write文件一个字节后何时发起写磁盘IO
- Mac环境安装Composer
- 构建者模式(Builder pattern)
- Apache Kylin远程代码执行漏洞复现(CVE-2020-1956)
- The first open source Chinese Bert pre training model in the financial field
猜你喜欢
It's just right. It's the ideal state
Gopherchina 2020 Conference
Drink soda, a bottle of soda water 1 yuan, two empty bottles can change a bottle of soda, give 20 yuan, how much soda can you
大龄程序员没有出路吗?
awk实现类sql的join操作
小米、OPPO在欧洲市场继续飙涨,小米更是直逼苹果
Builder pattern
2035 we will build such a country
小青台正式踏上不归路的第3天
Interpretation of deepmind's latest paper: the causal reasoning algorithm in discrete probability tree is proposed for the first time
随机推荐
Golang 系统ping程序探测存活主机(任意权限)
机械硬盘随机IO慢的超乎你的想象
基于阿里云日志服务快速打造简版业务监控看板
write文件一个字节后何时发起写磁盘IO
小青台正式踏上不归路的第3天
STM32CubeIDE下载安装-GPIO基本配置操作-Debug调试(基于CMSIS DAP Debug)
Interpretation of deepmind's latest paper: the causal reasoning algorithm in discrete probability tree is proposed for the first time
3、 The parameters of the function
wanxin finance
二叉树的四种遍历方应用
(O)ServiceManager分析(一)之BinderInternal.getContextObject
“他,程序猿,35岁,被劝退”:不要只懂代码,会说话,胜过10倍默默努力
Improvement of rate limit for laravel8 update
The first open source Chinese Bert pre training model in the financial field
我们做了一个医疗版MNIST数据集,发现常见AutoML算法没那么好用
Gopherchina 2020 Conference
Stm32uberide download and install - GPIO basic configuration operation - debug (based on CMSIS DAP debug)
学习记录并且简单分析
Eight ways to optimize if else code
阿里云加速增长,进一步巩固领先优势