opencv sift match
来源:互联网 发布:怎样更新淘宝最新版本 编辑:程序博客网 时间:2024/05/18 03:37
#include "opencvlib.h"using namespace cv;int main(){ Mat img_1 = cv::imread("1.png"); Mat img_2 = cv::imread("2.png"); imshow("img1", img_1); imshow("img2", img_2); if (!img_1.data || !img_2.data) { std::cout << " --(!) Error reading images " << std::endl; return -1; } //-- Step 1: Detect the keypoints using SURF Detector int minHessian = 400; SurfFeatureDetector detector(minHessian); std::vector<KeyPoint> keypoints_1, keypoints_2; detector.detect(img_1, keypoints_1); detector.detect(img_2, keypoints_2); //-- Step 2: Calculate descriptors (feature vectors) SiftDescriptorExtractor extractor; //SurfDescriptorExtractor Mat descriptors_1, descriptors_2; extractor.compute(img_1, keypoints_1, descriptors_1); extractor.compute(img_2, keypoints_2, descriptors_2); //-- Step 3: Matching descriptor vectors using FLANN matcher FlannBasedMatcher matcher; std::vector< DMatch > matches; matcher.match(descriptors_1, descriptors_2, matches); double max_dist = 0; double min_dist = 1000; //-- Quick calculation of max and min distances between keypoints for (int i = 0; i < descriptors_1.rows; i++) { double dist = matches[i].distance; if (dist < min_dist) min_dist = dist; if (dist > max_dist) max_dist = dist; } printf("-- Max dist : %f \n", max_dist); printf("-- Min dist : %f \n", min_dist); //-- Draw only "good" matches (i.e. whose distance is less than 2*min_dist ) //-- PS.- radiusMatch can also be used here. std::vector< DMatch > good_matches; for (int i = 0; i < descriptors_1.rows; i++) { if (matches[i].distance < 2 * min_dist) { good_matches.push_back(matches[i]); } } //-- 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); imwrite("matchs.jpg", img_matches); for (int i = 0; i < good_matches.size(); i++) { printf("-- Good Match [%d] Keypoint 1: %d -- Keypoint 2: %d \n", i, good_matches[i].queryIdx, good_matches[i].trainIdx); } waitKey(0); system("pause"); return 0;}
result
0 0
- opencv sift match
- python cv2 sift match
- opencv sift配置
- VS2010+Opencv+SIFT
- OpenCV提取SIFT特征
- Opencv SIFT特征提取
- opencv下SIFT使用
- SIFT Opencv 代码
- Python opencv 调用sift
- VS2010+Opencv+SIFT
- opencv之sift算法
- 【OpenCV】SIFT特征提取
- opencv中sift算法
- opencv中sift算法
- opencv提取SIFT特征
- 【opencv】sift + RANSAC
- opencv template match
- OpenCV中SIFT的实现
- AndroidAnnotation 在AS中的配置
- 读《不能承受的生命之轻》 的思考
- 搜索引擎不抓取的网站内容大纲
- Hadoop--倒排索引过程详解
- 初窥Linux 之 我最常用的20条命令
- opencv sift match
- storm0.9.2集群的搭建
- gbdt+fm
- SDM For Face Alignment 流程介绍及Matlab代码实现之训练篇
- 越过用户授权使用浮窗
- DP 动态规划 Problem B 1002 求最长上升子序列的长度
- HashMap源码分析
- 关于内链优化的几个细节问题
- Disabling contextual LOB creation as createClob() method threw error : java.lang