2017年7月21日 星期五

Visual Studio 編譯 OpenCV 3 的擴充 Contrib 函式庫

OpenCV 3.2.0 的擴充 Contrib 函式庫如何編譯 與 使用 (Visual Studio)

關於一般的使用可以參考站內文章:OpenCV 3.2.0 vc14 如何安裝在 Visual Studio 2017
OpenCV 從第三版開始就把一些函式庫拆出來放到 Contrib 上如果要使用要自己重新編一次整份,這個編譯CPU不好可能要不少時間。
站長編譯的 VS2017 版本載點如下;點擊安裝即可,會自動部屬環境變數。
站內連結 懶人包http://charlottehong.blogspot.com/2017/12/opencv320-contrib.html

導航

  • 下載
  • 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這個資料夾,留這個即可剩下的都可以砍了
把名稱更改為 OpenCV320_VC15 放到C槽底下
再來下載兩個批次檔:https://mega.nz/#F!B993FSKJ!NZ2YRRUGSb9r4JQQyHslpw
把AddPath放到這裡來運行(這個只是新增bin到環境變數)
把CreatList放到這裡點兩下運行,會多出兩個文字文件,先把他打開放著。(這個只是取得這個資料夾內所有 .lib 檔名稱)
打開你 Debug 可以看到這裡的檔案每個檔名結尾都有一個d表示是Debug模式用的,沒有Debug是給Release用的,因為這裡還沒編譯打開查看會是空的。


專案的建設

先開一份空專案
貼上測試的代碼:
/**********************************************************
Name :
Date : 2016/05/29
By   : CharlotteHonG
Final: 2016/05/29
**********************************************************/
#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檔案,這裡我已經幫你把檔案清待分開了,在不同的模式輸入不同的清單即可。


其他補充 - 快速流程

  1. 下載指令替代
  2. Cmake部分其實可以用指令替代
  3. 指令開啟專案 -> CTRL+SH+B -> 換Release版本在一次
  4. 對著 INSTALL 右鍵, J, B
  5. install資料夾指令移動到C曹
  6. 指令配置bin環境變數
可以看參考這一篇,有做一半的流程
https://charlottehong.blogspot.tw/2018/03/opencv-341-contrib.html

沒有留言:

張貼留言