win10 + vs2017 + opencv4.0.0rc + contrib擴充套件庫 配置
最近在做基於opencv相關東西時,需要用到contrib擴充套件庫,配置完記錄下。 先寫一下版本資訊:opencv4.0.0rc,vs2017和 win10。
目錄
1. 準備工具
主要用到: CMake,contrib和vs
1.1 CMake下載安裝
下載地址: https://cmake.org/download/
下載的是紅框中的,解壓之後即可使用(點選cmake-gui.exe即可)。
1.2 opencv_contrib下載安裝
下載地址: https://github.com/opencv/opencv_contrib/releases
選擇你的opencv對應的版本。下載完成之後直接解壓即可。
opencv_contrib-4.0.0-rc.zip解壓完如下圖:
2. CMake 編譯
-
開啟CMake,上面紅框第一行輸入Opencv(我的是opencv4.0)的sources目錄(注意:不是opencv_contrib的目錄,原來自己opencv的目錄);第二行輸入你自定義的輸出目錄。最後點左下角紅框的Configure
-
然後選擇對應vs的版本,64位系統選擇Win64(我的是x64),預設的是Win32。
選擇完就是這樣如下圖:
然後就是等待了。之後顯示Configuring done第一次原始碼配置就完成了(完成後列表不出現紅色)。
要是如上述紅色,需要再次單擊 Configure知道如下圖所示,則完成。
-
完成上述後找到OPENCV_EXTRA_MODULES_RATH一項,新增你剛剛解壓的opencv_contrib中的modules目錄,最後點選Generate開始編譯。
完成後左下角顯示Configuring done,Generating done。
完成之後
3. VS2017 編譯
- 使用VS2017開啟剛剛的“OpenCV.sln”檔案
- 然後如圖所示點選“生成—>重新生成解決方案”,這得等一段時間
完成後(我的有1個失敗,8個跳過,目前沒有出現問題,還沒研究為什麼不能全部生成成功的原因**)
- “解決方案資源管理器—>CMakeTargets—>INSTALL—>僅用於專案—>僅生成INSTALL(B)”然後又是等好一會兒
完成後
- 最後到自定義的資料夾確認一下,找到install資料夾,進去檢視裡面的內容(如下圖,注:對於後邊配置環境,install資料夾作用就像配置opencv4.0時的build資料夾一樣):
4. 環境配置
1. 環境變數配置
- 右鍵電腦【屬性】
- 【高階系統設定】
- 【環境變數】
- 【系統變數】【Path】
編譯目錄“ *\install\x64\vc15\bin” 的完整路徑 (如下圖)
2. vs2017配置
1.新建專案,屬性管理器 -> 配置屬性 ->VC++目錄
其中包含目錄、庫目錄配置方法如同opencv4.0配置,此處只貼圖,過程參考下述連結(把install資料夾看做配置opencv4.0時的build資料夾一),附opencv4.0配置過程:https://blog.csdn.net/weixin_41991128/article/details/83656543
2.屬性管理器 -> 配置屬性 ->連結器****附加依耐項配置
注意:附加依賴項有變化:opencv_contrib的依賴項如下(我的opencv4.0.0rc的contrib),不同於opencv4.0只配置兩項(opencv_world400d.lib,opencv_world400.lib):
opencv_aruco400d.lib
opencv_bgsegm400d.lib
opencv_bioinspired400d.lib
opencv_calib3d400d.lib
opencv_ccalib400d.lib
opencv_core400d.lib
opencv_datasets400d.lib
opencv_dnn400d.lib
opencv_dnn_objdetect400d.lib
opencv_dpm400d.lib
opencv_face400d.lib
opencv_features2d400d.lib
opencv_flann400d.lib
opencv_fuzzy400d.lib
opencv_gapi400d.lib
opencv_hfs400d.lib
opencv_highgui400d.lib
opencv_imgcodecs400d.lib
opencv_imgproc400d.lib
opencv_img_hash400d.lib
opencv_line_descriptor400d.lib
opencv_ml400d.lib
opencv_objdetect400d.lib
opencv_optflow400d.lib
opencv_phase_unwrapping400d.lib
opencv_photo400d.lib
opencv_plot400d.lib
opencv_reg400d.lib
opencv_rgbd400d.lib
opencv_saliency400d.lib
opencv_shape400d.lib
opencv_stereo400d.lib
opencv_stitching400d.lib
opencv_structured_light400d.lib
opencv_superres400d.lib
opencv_surface_matching400d.lib
opencv_text400d.lib
opencv_tracking400d.lib
opencv_video400d.lib
opencv_videoio400d.lib
opencv_videostab400d.lib
opencv_viz400d.lib
opencv_xfeatures2d400d.lib
opencv_ximgproc400d.lib
opencv_xobjdetect400d.lib
opencv_xphoto400d.lib
其中:400表示4.0.0版本
另附:獲取上述依賴項
- 開啟命令列視窗
- 輸入下述兩行命令,可以在lib資料夾得到0.txt檔案
D:\SoftwareInstall_all\opencv4.0\contrib_4.0.0rc_cmake\sources_contrib\install\x64\vc15\lib`
dir /b *.lib *>0.txt
0.txt檔案:
5. 程式驗證
驗證程式碼如下,這個一個簡化的直線提取的官方例程,使用了contrib擴充套件裡的#include "opencv2/ximgproc.hpp"標頭檔案。
#include <iostream>
#include "opencv2/imgproc.hpp"
#include "opencv2/ximgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
using namespace std;
using namespace cv;
using namespace cv::ximgproc;
int main(int argc, char** argv)
{
//在工程目錄下放一張名字為"01.jpg"的圖片
Mat image = imread("01.jpg", IMREAD_GRAYSCALE);
imshow("Input", image);
if (image.empty())
{
return -1;
}
Ptr<LineSegmentDetector> lsd = createLineSegmentDetector();
vector<Vec4f> lines_lsd;
int length_threshold = 10;
float distance_threshold = 1.41421356f;
double canny_th1 = 50.0;
double canny_th2 = 50.0;
int canny_aperture_size = 3;
bool do_merge = false;
Ptr<FastLineDetector> fld = createFastLineDetector(length_threshold,
distance_threshold, canny_th1, canny_th2, canny_aperture_size,
do_merge);
vector<Vec4f> lines_fld;
for (int run_count = 0; run_count < 10; run_count++)
{
lines_lsd.clear();
int64 start_lsd = getTickCount();
lsd->detect(image, lines_lsd);
// Detect the lines with LSD
double freq = getTickFrequency();
double duration_ms_lsd = double(getTickCount() - start_lsd) * 1000 / freq;
}
// Show found lines with LSD
Mat line_image_lsd(image);
lsd->drawSegments(line_image_lsd, lines_lsd);
imshow("LSD result", line_image_lsd);
waitKey(0);
return 0;
}
效果如下:
到此contrib擴充套件庫已全部配置完。
6 參考
主要參考
[1]: https://blog.csdn.net/weixin_41991128/article/details/84593477
[2]: https://blog.csdn.net/weixin_41991128/article/details/83656543#1_47
[3]: https://blog.csdn.net/weixin_41695564/article/details/79925379