1. 程式人生 > >OpenCV3.4.1+opencv_contrib編譯:windows 10

OpenCV3.4.1+opencv_contrib編譯:windows 10

做計算機視覺的朋友,估計沒有人沒用過OpenCV,著名的開源計算機視覺演算法庫。OpenCV還在不斷髮展中,最新的3.4版本,已經可以支援cnn了,以後估計會有整合更多的功能。
不過,由於智慧財產權的原因,OpenCV將很多演算法放到了opencv_contrib中,在github上,這兩塊程式碼就是分別放在不同的repository中的。
這裡寫圖片描述
OpenCV官方提供了windows可安裝的版本,已經有編譯好的dll,不過不包括opencv_contrib。如果想應用這部分演算法,則需要自己編譯opencv,將opencv_contrib編譯到opencv中。以下簡單介紹以下opencv在windows下編譯的過程。
所需材料:

  • opencv原始碼
  • opencv_contrib原始碼
  • cmake
  • vs2015
  • 一個通暢的網路(這點很重要~)

1.下載opencv原始碼
原始碼的地址是:https://github.com/opencv/opencv/,預設是master分支。其實都下載master分支,就可以。不過,為了清晰原始碼版本,以後還能做到匹配,我選擇了tags中的最新版本,3.4.1版本,地址是:
https://github.com/opencv/opencv/tree/3.4.1
程式碼可通過git下載,用git clone命令即可。也可以在網頁上點選Clone or download這個綠色按鈕,然後點選download zip就可以。
這裡寫圖片描述

2.下載opencv_contrib原始碼
opencv_contrib程式碼地址是:https://github.com/opencv/opencv_contrib
3.4.1版本程式碼地址是:https://github.com/opencv/opencv_contrib/tree/3.4.1
相信大家也都發現規律了,參考下載opencv原始碼方法即可。
下載後,解壓程式碼到本地目錄。
這裡寫圖片描述
上圖就是我解壓的目錄,其中有opencv和opencv_contrib的解壓目錄,還有一個build目錄,用來放置cmake生成的vs工程。
3.安裝cmake
CMake是一個跨平臺的編譯工具,能夠輸出各種各樣的makefile或者project檔案。
這裡寫圖片描述


下載地址:https://cmake.org/files/v3.11/cmake-3.11.3-win64-x64.msi
下載之後直接執行,預設安裝即可。
4.用cmake生成vs工程
安裝好cmake之後,執行cmake,先填寫開頭的兩項
這裡寫圖片描述
Where is the source code是opencv原始碼路徑,即“源路徑”
Where to build the binaries是要生成opencv的vs工程路徑,即“目的路徑”
點選Configure,彈出對話方塊,選擇編譯工程的平臺。我選的是64位的VS2015
這裡寫圖片描述
點選Finish,即開始配置。這需要一定的時間,期間要下載一些依賴項,此時通暢的網路就起了關鍵作用,如果下載不全,可通過檢視日誌檔案CMakeDownloadLog.txt手動下載。在完成第一次配置後,出現如下畫面。
這裡寫圖片描述
有很多紅色選項,說明有問題,解決方法就是再點選一次Configure,這次快多了,出現下面畫面。
這裡寫圖片描述
全變白了,說明沒問題了,這是需要做兩項改動。
這裡寫圖片描述
第一項是勾選BUILD_opencv_world選項,這樣,在呼叫dll時,只調用這一個就行了,不用根據功能選擇了,省了些麻煩。
這裡寫圖片描述
這第二項,自然是在OPENCV_EXTRA_MODULES_PATH選項中,填寫opencv_contrib解壓目錄下,modules資料夾的路徑,這樣就把opencv_contrib編譯進去了。
然後再按Configure進行配置,和前面一樣,一次紅,二次白,不在贅述了。第二次全白了,就可以按Generate按鍵,生成vs工程檔案了。
這裡寫圖片描述
5.用VS2015編譯opencv原始碼
生成工程完畢,在剛才說的“目的路徑”下,可以看到OpenCV工程檔案
這裡寫圖片描述
用vs2015開啟工程檔案,選擇Debug x64,點選生成->生成解決方案開始編譯,這個過程比較漫長,需要耐心,結果如下。
這裡寫圖片描述
沒有錯誤,然後右擊INSTALL,點選“僅用於專案->僅生成INSTALL”
這裡寫圖片描述
即可編譯生成dll相關檔案,編譯過程如下。
這裡寫圖片描述
然後將編譯選項調整為Release x64,再重複一下以上的過程。此時在“目的路徑”的install目錄下,生成了呼叫dll的全部內容。
這裡寫圖片描述
6.呼叫生成的dll實現影象處理功能
為了驗證生成檔案的有效性,新建工程,將庫目錄和包含目錄指定到install資料夾下x64/vc14/lib和include資料夾。處理圖片文標準測試圖片house
這裡寫圖片描述
測試程式碼如下:

#include "opencv2/opencv.hpp"  
#include"opencv2/xfeatures2d.hpp"

#if _DEBUG
#pragma comment(lib,"opencv_world341d.lib")
#else
#pragma comment(lib,"opencv_world341.lib")
#endif // _DEBUG

using namespace cv;
using namespace std;

int main(){
    Mat img = imread("E:/PASCAL/OpenCV/house.jpg", CV_LOAD_IMAGE_COLOR);
    Ptr<Feature2D> sift = xfeatures2d::SIFT::create();
    vector<KeyPoint> keypoints;
    Mat descriptors;

    sift->detectAndCompute(img, noArray(), keypoints, descriptors);
    drawKeypoints(img, keypoints, descriptors, Scalar(0, 255, 255));
    imshow("Result", descriptors);
    waitKey(0);

    return 0; 
}

測試結果如下。
這裡寫圖片描述
實現了contrib中sift特徵點的提取。