导航

« python技巧opencv各版本百度网盘下载地址  »

C++和opencv配置后的测试代码

虚位以待 Opencv

C++和opencv配置后的测试代码,通用提取2张图片特征来连线,这个代码只是用来测试c++和opencv配置了成功与否,opencv是3.x版本的,一般要经过Cmake后才有这个功能(在contrib中)

折叠C/C++ Code复制内容到剪贴板
  1. #include<opencv2/features2d/features2d.hpp>  
  2. #include<opencv2/opencv.hpp>  
  3. #include<opencv2/highgui/highgui.hpp>  
  4. #include<opencv2/xfeatures2d/nonfree.hpp>  
  5. #include<opencv2/core/core.hpp>  
  6.   
  7. #include<iostream>  
  8. using namespace std;  
  9. using namespace cv;  
  10. using namespace cv::xfeatures2d;  
  11. int main()  
  12. {  
  13.     Mat srcImage1 = imread("1.jpg", 1);  
  14.     Mat srcImage2 = imread("2.jpg", 1);  
  15.     if (!srcImage1.data || !srcImage2.data)  
  16.     {  
  17.         cout << "读取图片出错" << endl;  
  18.         return false;  
  19.     }  
  20.   
  21.     imshow("原始图1", srcImage1);  
  22.     imshow("原始图2", srcImage2);  
  23.   
  24.     int minHessian = 100;  
  25.     Ptr<SurfFeatureDetector> detector = SurfFeatureDetector::create(minHessian);  
  26.   
  27.     vector<cv::KeyPoint> key_points_1, key_points_2;  
  28.   
  29.     Mat dstImage1, dstImage2;  
  30.     detector->detectAndCompute(srcImage1, Mat(), key_points_1, dstImage1);  
  31.     detector->detectAndCompute(srcImage2, Mat(), key_points_2, dstImage2);//可以分成detect和compute  
  32.   
  33.     Mat img_keypoints_1, img_keypoints_2;  
  34.     drawKeypoints(srcImage1, key_points_1, img_keypoints_1, Scalar::all(-1), DrawMatchesFlags::DEFAULT);  
  35.     drawKeypoints(srcImage2, key_points_2, img_keypoints_2, Scalar::all(-1), DrawMatchesFlags::DEFAULT);  
  36.   
  37.     Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("FlannBased");  
  38.     vector<DMatch>mach;  
  39.   
  40.     matcher->match(dstImage1, dstImage2, mach);  
  41.     double Max_dist = 0;  
  42.     double Min_dist = 100;  
  43.     for (int i = 0; i < dstImage1.rows; i++)  
  44.     {  
  45.         double dist = mach[i].distance;  
  46.         if (dist < Min_dist)Min_dist = dist;  
  47.         if (dist > Max_dist)Max_dist = dist;  
  48.     }  
  49.     cout << "最短距离" << Min_dist << endl;  
  50.     cout << "最长距离" << Max_dist << endl;  
  51.   
  52.     vector<DMatch>goodmaches;  
  53.     for (int i = 0; i < dstImage1.rows; i++)  
  54.     {  
  55.         if (mach[i].distance < 2 * Min_dist)  
  56.             goodmaches.push_back(mach[i]);  
  57.     }  
  58.     Mat img_maches;  
  59.     drawMatches(srcImage1, key_points_1, srcImage2, key_points_2, goodmaches, img_maches);  
  60.   
  61.     for (int i = 0; i < goodmaches.size(); i++)  
  62.     {  
  63.         cout << "符合条件的匹配:" << goodmaches[i].queryIdx << "--" << goodmaches[i].trainIdx << endl;  
  64.     }  
  65.     imshow("效果图1", img_keypoints_1);  
  66.     imshow("效果图2", img_keypoints_2);  
  67.     imshow("匹配效果", img_maches);  
  68.   
  69.     waitKey(0);  
  70.     return 0;  
  71. }  

效果图:

opencv_contrib

  • 顶一下
虚位以待


  • 相关文章:


原创文章如转载,请注明:转载自落日故乡

本文链接地址:http://www.spersky.com/post/opencv3.html

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

内容搜索


虚位以待

常用链接

最新评论及回复

Powered By Z-Blog

Copyright spersky All Rights Reserved.Theme Moonlight,Calf modified.n 浙ICP备16017820号-1