配置opencv-contrib


下載對應版本的opencv-contrib

 

 

 

 

 

 

 CMake編譯

 

 

 

 

 

 

 

 如果有錯誤查看日志

 

 

 打開日志文件,使用里面的地址從瀏覽器里面下載文件。

 

 文件下載之后,放置在文件相應位置,並修改文件名。

 

 

 

 

 

 

 

 

 進入Vs編譯

 

 

 

 

 

 

 

 

 

 

 

關於OpenCV4.0.1+contrib配置時運行程序出現“無法定位程序入口點”問題的解決辦法

解決方法

將…\opencv\opencv_contrib\x64\vc15\bin中的所有dll后綴文件拷貝到C:\Windows\System32中,問題解決。

或者放在以下位置也是可以的 

 

 

 測試代碼

 1 #include <opencv2/opencv.hpp>
 2 #include <opencv2/xfeatures2d.hpp>
 3 //#include <opencv2/>
 4 
 5 using namespace std;
 6 using namespace cv;
 7 
 8 int main()
 9 {
10     cv::Mat imageL = cv::imread("origin_1.jpg");
11     cv::Mat imageR = cv::imread("origin_2.jpg");
12     /*imshow("1", imageL);
13     imshow("2", imageR);
14     waitKey();
15     return 0;*/
16 
17 
18 
19     //提取特征點方法
20     //SIFT
21     cv::Ptr<cv::xfeatures2d::SIFT> sift = cv::xfeatures2d::SIFT::create();
22     //ORB
23     //cv::Ptr<cv::ORB> orb = cv::ORB::create();
24     //SURF
25     //cv::Ptr<cv::xfeatures2d::SURF> surf = cv::xfeatures2d::SURF::create();
26 
27     //特征點
28     std::vector<cv::KeyPoint> keyPointL, keyPointR;
29     //單獨提取特征點
30     sift->detect(imageL, keyPointL);
31     sift->detect(imageR, keyPointR);
32 
33     //畫特征點
34     cv::Mat keyPointImageL;
35     cv::Mat keyPointImageR;
36     drawKeypoints(imageL, keyPointL, keyPointImageL, cv::Scalar::all(-1), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
37     drawKeypoints(imageR, keyPointR, keyPointImageR, cv::Scalar::all(-1), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
38 
39     //顯示窗口
40     cv::namedWindow("KeyPoints of imageL", cv::WINDOW_AUTOSIZE);
41     cv::namedWindow("KeyPoints of imageR", cv::WINDOW_AUTOSIZE);
42 
43     //顯示特征點
44     cv::imshow("KeyPoints of imageL", keyPointImageL);
45     cv::imshow("KeyPoints of imageR", keyPointImageR);
46 
47     //特征點匹配
48     cv::Mat despL, despR;
49     //提取特征點並計算特征描述子
50     sift->detectAndCompute(imageL, cv::Mat(), keyPointL, despL);
51     sift->detectAndCompute(imageR, cv::Mat(), keyPointR, despR);
52 
53     //Struct for DMatch: query descriptor index, train descriptor index, train image index and distance between descriptors.
54     //int queryIdx –>是測試圖像的特征點描述符( descriptor )的下標,同時也是描述符對應特征點(keypoint)的下標。
55     //int trainIdx –> 是樣本圖像的特征點描述符的下標,同樣也是相應的特征點的下標。
56     //int imgIdx –>當樣本是多張圖像的話有用。
57     //float distance –>代表這一對匹配的特征點描述符(本質是向量)的歐氏距離,數值越小也就說明兩個特征點越相像。
58     std::vector<cv::DMatch> matches;
59 
60     //如果采用 flannBased 方法 那么 desp通過orb的到的類型不同需要先轉換類型
61     if (despL.type() != CV_32F || despR.type() != CV_32F)
62     {
63         despL.convertTo(despL, CV_32F);
64         despR.convertTo(despR, CV_32F);
65     }
66 
67     cv::Ptr<cv::DescriptorMatcher> matcher = cv::DescriptorMatcher::create("FlannBased");
68     matcher->match(despL, despR, matches);
69 
70     //計算特征點距離的最大值 
71     double maxDist = 0;
72     for (int i = 0; i < despL.rows; i++)
73     {
74         double dist = matches[i].distance;
75         if (dist > maxDist)
76             maxDist = dist;
77     }
78 
79     //挑選好的匹配點
80     std::vector< cv::DMatch > good_matches;
81     for (int i = 0; i < despL.rows; i++)
82     {
83         if (matches[i].distance < 0.5 * maxDist)
84         {
85             good_matches.push_back(matches[i]);
86         }
87     }
88 
89 
90 
91     cv::Mat imageOutput;
92     cv::drawMatches(imageL, keyPointL, imageR, keyPointR, good_matches, imageOutput);
93 
94     cv::namedWindow("picture of matching", cv::WINDOW_AUTOSIZE);
95     cv::imshow("picture of matching", imageOutput);
96     cv::waitKey(0);
97     return 0;
98 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM