OpenCV 3.2.0 的擴充 Contrib 函式庫如何編譯 與 使用 (Visual Studio)
OpenCV 從第三版開始就把一些函式庫拆出來放到 Contrib 上如果要使用要自己重新編一次整份,這個編譯CPU不好可能要不少時間。
導航
下載
CMAKE 產生編譯檔案
MAKE 編譯檔案
建立檔案
下載
記得版本就下對opencv341要對opencv341 contrib,另外 VS2017 多次改版 cmake 要跟著升級不然make出來的東西VS不能編譯,會一堆失敗。
我第一次使用的時候版本錯了,一直出現錯誤找不到原因
cmake 會彈出 error configuring process, project files may be invalid 的錯誤信息
出現這個八成是版本錯了或者是沒有使用圖形介面選路徑(這個應該是cmake的bug)
版本從這裡選擇不要直接直接下
懶人包連結:
如果有安裝 Git 可以直接打指令省下解壓縮時間與空間
git clone -b 3.4.1 https://github.com/opencv/opencv
git clone -b 3.4.1 https://github.com/opencv/opencv_contrib
沒有的話按右邊下載zip檔案下來把兩個都下載下來
下載 cmake
根據自己的作業系統選擇正確的版本
安裝的時候創建一下捷徑與環境變數
CMAKE
打開之後最上面兩個路徑,第一個是opencv的路徑,如果是用 git 下載的就是選到下載的解壓後的資料夾,如果是從官方下載的選到source資料夾;
第二個是編譯後的路徑,選到你喜歡能夠找到的位置即可,記得創個空資料夾包起來。
(圖中我是從git下載的,如果下載zip資料夾名會多版本號)
先按左下角configure,然後跳出要你選編譯器,選你正在用的版本;注意圖中有個Win64建議選64位元的,效能較佳。
這邊第一次可能會卡一下,第一次時需要從網路下載缺失的套件,記得連網。
找到 ,輸入你下載的 opencv_contrib 中的 modules。
注意這裡不能貼上路徑會出錯,一定要按右邊按鈕選路徑(可能是bug)。
然後再按一下 configure ,第二次如果會出錯,看一下上面提到的。
接著按一下 Generate 就完成了,右邊 Open Project 可以直接打開;如果你有多個 Visual Studio 最好手動打該正確的版本,按一下打開專案,然後再找到路徑內的專案打開,再來別急著自己按。
到此完成第一階段了,已經產生需要編譯的檔案了
編譯生成檔案
對著專案按右鍵重建方案,準備好在按這裡會編譯很久且途中不能反悔關不掉;我自己實測i7 4790K約15~20分、i5 4460會到1小時。
這裡我是使用Debug模式重建,如果你需要使用Release模式編譯OpenCV需要在這裡選擇;兩個都需要就要個別編譯一次!
建好之後檢查一下底下有沒有錯誤
最後對著INSTALL按下僅限專案->僅建置INSTALL
完成編譯了,只剩下使用。
如何使用 OpenCV
之後找到install這個資料夾,留這個即可剩下的都可以砍了
把AddPath放到這裡來運行(這個只是新增bin到環境變數)
把CreatList放到這裡點兩下運行,會多出兩個文字文件,先把他打開放著。(這個只是取得這個資料夾內所有 .lib 檔名稱)
打開你 Debug 可以看到這裡的檔案每個檔名結尾都有一個d表示是Debug模式用的,沒有Debug是給Release用的,因為這裡還沒編譯打開查看會是空的。
專案的建設
先開一份空專案
貼上測試的代碼:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char const *argv[]) {
Mat img(270, 720, CV_8UC3, Scalar(56, 50, 38));
line(img, Point(20, 40), Point(120, 140), Scalar(255, 0, 0), 3);
rectangle(img, Point(150, 40), Point(250, 140), Scalar(0, 0, 255), -1);
circle(img, Point(330, 90), 50, Scalar(0, 255, 0), -1);
ellipse(img, Point(460, 90), Size(60, 40), 45, 0, 360, Scalar(255, 255, 0), 2);
Point points[1][5];
int x = 40, y = 540;
points[0][0] = Point(0 + y, 50 + x);
points[0][1] = Point(40 + y, 0 + x);
points[0][2] = Point(110 + y, 35 + x);
points[0][3] = Point(74 + y, 76 + x);
points[0][4] = Point(28 + y, 96 + x);
const Point* ppt[1] = { points[0] };
int npt[] = { 5 };
polylines(img, ppt, npt, 1, 1, Scalar(0, 255, 255), 3);
putText(img, "Test Passed !!", Point(10, 230), 0, 3, Scalar(255, 170, 130), 3);
imshow("OpenCV Test By:Charlotte.HonG", img);
waitKey(0);
return 0;
}
修改屬性(先確認上方模式 Debug - x64 要是對的)
加入include目錄
加入lib目錄
加入lib檔案
目錄底下每個lib都要打上來(剛剛打開的文件夾可以一次複製全部)
然後就完成了
接下來你可以考慮把剛剛的模式改為Release模式在重新編譯一次;接著把檔案重新複製到C曹執行剛剛重複的步驟,就可以獲得兩個版本的檔案了,其中只需要注意引入的dll檔案,這裡我已經幫你把檔案清待分開了,在不同的模式輸入不同的清單即可。
其他補充 - 快速流程
- 下載指令替代
- Cmake部分其實可以用指令替代
- 指令開啟專案 -> CTRL+SH+B -> 換Release版本在一次
- 對著 INSTALL 右鍵, J, B
- install資料夾指令移動到C曹
- 指令配置bin環境變數