使用sift特征点进行knn最近邻匹配
进行 匹配 特征 最近 KNN SIFT 使用
2023-09-11 14:18:37 时间
1 #include <opencv2/xfeatures2d/nonfree.hpp> 2 #include <opencv2/features2d/features2d.hpp> 3 #include <opencv2/highgui/highgui.hpp> 4 #include <opencv2/calib3d/calib3d.hpp> 5 #include <iostream> 6 7 8 using namespace cv; 9 using namespace std; 10 11 int main(int argc, char** argv) 12 { 13 Mat img1 = imread(argv[1]); 14 Mat img2 = imread(argv[2]); 15 vector<KeyPoint> keypoints_1, keypoints_2; 16 Mat descriptor_1, descriptor_2; 17 Ptr<Feature2D> sift = xfeatures2d::SIFT::create(0, 3, 0.04, 10); 18 19 sift->detectAndCompute(img1, noArray(), keypoints_1, descriptor_1); 20 sift->detectAndCompute(img2, noArray(), keypoints_2, descriptor_2); 21 cout<< keypoints_1.size()<<" "<<keypoints_2.size()<<endl; 22 Mat outimg1; 23 drawKeypoints(img1, keypoints_1, outimg1, Scalar::all(-1), DrawMatchesFlags::DEFAULT); 24 imshow("KeyPoint", outimg1); 25 26 vector<DMatch> matches; 27 vector<vector<DMatch>> knn_matches; 28 29 BFMatcher matcher(NORM_L2); 30 matcher.knnMatch(descriptor_1, descriptor_2, knn_matches, 2); 31 32 for (size_t r = 0; r < knn_matches.size(); ++r) 33 { 34 if (knn_matches[r][0].distance > 0.8*knn_matches[r][1].distance ) continue; 35 matches.push_back(knn_matches[r][0]); 36 } 37 38 Mat img_match; 39 Mat img_goodmatch; 40 drawMatches (img1, keypoints_1, img2, keypoints_2, matches, img_goodmatch); 41 imshow("good match", img_goodmatch); 42 waitKey(0); 43 44 return 0; 45 46 }
输入两张图像
提取sift特征点
使用knnmatch进行最近邻匹配
相关文章
- 关于远程桌面登陆提示“连接被拒绝,因为没有授权此用户账号进行远程登录”
- C# 序列化与反序列化之xml对属性或者字段的子类化的子对象进行序列化的解决方案
- C# Java间进行RSA加密解密交互
- 「补课」进行时:设计模式(19)——状态模式
- Nginx - rewrite 不区分大小写进行匹配
- Scala模式匹配:对列表进行匹配
- Scala模式匹配:对规则进行匹配
- Excel:Excel使用技巧经验总结之(利用Excel自带功能统计各个字段不同类别及其个数并进行图表可视化+非编程实现)图文教程之详细攻略
- 机器学习实战分享:用 Python 进行信用卡欺诈检测
- 使用jemalloc对nginx进行优化 By HKL,
- 采用 opencv surf 算子进行特征匹配
- 如何一键进行重装Win11系统
- Maven的生命周期是为了对所有的构建过程进行了抽象了,便于统一。