版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://mp.csdn.net/postedit/83211142
(針對已經使用opencv3.X的使用者)
一:下載並安裝cmake。https://cmake.org/download/
下載壓縮包.zip文件,然後解壓,在bin目錄下在找到cmake-gui.exe 打開運行。
二:根據你下載的opencv3.x版本下載相應的opencv_contrib-3.x.x。
https://opencv.org/releases.html
我下載的是opencv是3.3.0,所以我使用的opencv_contrib-3.x.x是opencv_contrib-3.3.0
(版本匹配很重要!!!!!)
三:開始進行配置。
運行cmake-gui,得到一個運行界面。
where is the sourse code: 放置的路徑爲你電腦的opencv3.x下的sources目錄。
where to build the binaries:放置的路徑爲你自己新建的目錄。(爲了存放之後進行配置的結果,目錄記好)
(根據你所用的VS版本和系統位數來選,比如我的 VS2017+x64(64位系統))
第一次編譯:點擊Configure。
如果編譯完成會顯示;
(溫馨提示:在這次編譯完成之後,可以將·Build-opencv-world選上,生成opencv_world330d.lib非常有用,就可以省去在後邊創建工程時包含多個動態鏈接,只包含這一個即可。本文後面說明的是使用多個鏈接,比較麻煩,建議勾選)
第二次編譯:在配置表中找到“OPENCV_EXTRA_MODUALS_PATH”,設置其參數值爲opencv_contrib源碼包中的modules目錄。本次編譯去除勾選WITH_CUDA選項。
再按下Configure.成功後顯示Configuring done。可能會有紅色的框條出現,再重複一次Configure,更新後紅色消除。
最後:按Generate生成工程,如果配置和生成工程都沒有問題的話,底下應該有Configuring done和Generating done兩行。
至此,生成相關文件已經完成。
四:打開opencv.sln工程,進行編譯
1、打開剛剛保存目錄下的 opencv.sln文件
2、在解決方案資源管理器中,選擇“解決方案 opencv”->右鍵->重新生成解決方案。
3、找到CMakeTargets下的INSTALL,右鍵INSTALL->僅用於項目->僅生成INSTALL。
4、注意debug和release都編譯一遍。
(由於我使用的是debug所以就沒有都編譯,只是在debug環境下編譯了)
編譯完成後,發現在目標文件夾下有了.\install文件夾。
其內容如下:
五:編譯成功後,在lib文件中有以下等相關.dll文件(一堆)。
六:重新配置環境
1、重新配置環境變量
①、環境變量設置:
②、用戶變量配置:
把你的install文件中的bin目錄加進去:
2、重新配置項目環境
①、包含目錄:
②、庫目錄:
③、附加依賴項:就是上面說的那一堆。(這個時候如果你生成了opencv_world330d.lib就可以只加入這一個,省時省力。就像你之前配置opencv3.x的時候也只是加入這一個動態鏈接。注意別加錯了)
七:代碼測試fast特徵檢測:
代碼;
#include "opencv2/opencv.hpp"
#include <opencv2/xfeatures2d.hpp>
#include <opencv2/core/core.hpp>
#include <iostream>
using namespace std;
using namespace cv;
using namespace cv::xfeatures2d;
void on_Trackbar(int, void*);
int thre = 40;
Mat src;
int main()
{
src = imread("D:\\Documents\\Pictures\\8.jpg");
resize(src,src,Size(600,450));
if (src.empty())
{
printf("open failed\n");
return -1;
}
namedWindow("src", WINDOW_AUTOSIZE);
imshow("src", src);
namedWindow("result", WINDOW_AUTOSIZE);
createTrackbar("threshould", "result", &thre, 255, on_Trackbar);
waitKey(0);
return 0;
}
void on_Trackbar(int, void*)
{
vector<KeyPoint> keypoints;
Mat dst = src.clone();
Ptr<FastFeatureDetector> detector = FastFeatureDetector::create(thre);
detector->detect(src, keypoints);
drawKeypoints(dst, keypoints, dst, Scalar::all(-1), DrawMatchesFlags::DRAW_OVER_OUTIMG);
imshow("result", dst);
}
結果:
至此完結。希望對大家有用。如果有問題,希望大家一起討論研究。不喜勿噴,謝謝。