2017年6月21日 星期三

OpenCV 3.4.1 如何安裝在 Visual Studio 2017 15.6.1

OpenCV 3.4.1 如何安裝在 Visual Studio 2017

想快速安裝可以從這邊,我有寫一個懶人包,執行就會自動幫你配置好專案的設置
https://charlottehong.blogspot.tw/2017/12/opencv320-contrib.html

正文開始

先到官方下載這兩項軟體 (點擊有連結)
建議直接解壓縮到C槽


文件說明

build文件是官方已經幫你預先編譯好的檔案,開進去opencv\build\x64,可以看到vc14的字樣,這是給 visual studio 用的。
其他還有像是python就抓python的資料夾那個檔案就可以用在python上了 python 站內文章;如果是MinGW官方沒有幫你預先編譯好,要自己從source這個用cMake自己編譯MingGW站內文章
總而言之會用到的只有
  • build/include
  • build/x64/vc14


部屬 OpenCV

首先只要做一次就好的是
  • 系統環境變數加入 bin 路徑
編譯器大概需要三個步驟(每次第一次開新專案)
  • 編譯器加入 include 路徑
  • 編譯器加入 lib 路徑
  • 編譯器加入 lib 檔案
另外 debug/release 以及 x86/x64 都要個別設定,開一次專案要設定4次

環境變數(說明文字在圖下)


搜索一下你的電腦環境變數或系統內容都可以(也可以直接對著本機按右鍵內容)

這裡就有環境變數給你設定了

增加一下bin這裡我 截圖貼錯 位置了 (QuQ 有空再改回來)
正確的位置是:opencv\build\x64\vc14\bin
如果在設定環境變數之前就已經先打開 Visual Studio 的話,會出現找不到.dll檔案,重新啟動 Visual Studio 就好,如果還是出現了,路徑檢查一下。
到這裡就可以了,只剩下VC的部分

設定編譯器

這裡每次開新專案都要重新設定一次,設定儲存在專案上而不是總體設定
新版的2017改版了會找不到win32主控台,可以看這篇換了新UI
Visual Studio 17 更新後 win32主控台 消失不見


開一份新的空專案


新增一份code (要先加入會影響到後面)
/**********************************************************
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);
    /* 開啟畫布 */
    namedWindow("OpenCV Test By:Charlotte.HonG", WINDOW_AUTOSIZE);
    imshow("OpenCV Test By:Charlotte.HonG", img);
    waitKey(0);
    return 0;
}
貼上測試代碼

先改成x64

對著專案點右鍵屬性

設定include路徑 (注意看最上方debug x64)

設定lib路徑

在這個路徑內 opencv\build\x64\vc14\lib
官方給的檔案一共有兩個
  • opencv_world331.lib
  • opencv_world331d.lib

加入lib檔案(debug模式選有d結尾的)
如果你要改成 release 模式記得前面的路徑還要再設定一次
  • 編譯器加入 include 路徑
  • 編譯器加入 lib 路徑
  • 編譯器加入 lib 檔案

運行

設定好之後直接按F5運行吧


其他

如果需要完整的OpenCV功能,比如說 SIFT 等這些實作需要自己重新編譯,重新編譯可以參考這篇站內文,手動編譯原始檔的方法
http://charlottehong.blogspot.com/2017/07/opencv-320-contrib-visual-studio.html

39 則留言:

  1. 你好,想請問為何我的visual沒有w32主控台應用程式?

    回覆刪除
    回覆
    1. 2017這幾周剛改版,位置變動了。可以查看這篇站內文
      https://charlottehong.blogspot.tw/2017/09/visual-studio-17-win32.html

      刪除
  2. 您好~~ 我照著步驟設定

    Path 也已經設定好了 平台也選擇x64 但是我下載的是opencv3.3 所以
    我的lib檔案我選擇 opencv_world330d;%(AdditionalDependencies)

    但是執行時 會出現

    無法開啟檔案 'opencv_world330d.obj' 請問是怎麼回事呢?

    回覆刪除
    回覆
    1. 這幾天我在試試看新版的

      刪除
    2. 沒有出現這個錯誤正常執行,照著步驟重做一次試試看。
      bin路徑要用x64/vc14/bin 才是正確的。

      刪除
  3. 你好~我遇到了一點問題

    在執行時出現一段錯誤訊息:{ 程式碼無法繼續執行,因為找不到 opencv_world330d.dll} 想請問如何解決?

    回覆刪除
    回覆
    1. 可能是環境變數那個步驟出問題

      刪除
    2. 嗯..今天才發現截圖中的一個步驟出錯了,環境變數那邊的路徑我貼錯了。

      刪除
    3. 作者已經移除這則留言。

      刪除
    4. 我也遇到一樣的情況,但最後是把dll複製到執行目錄才找到dll的

      刪除
    5. 環境變數的路徑設錯,圖片中的錯了,圖底下的文字有說明正確的路徑。

      刪除
    6. 或者是VC在設置環境變數之前就己經開啟,重開就好了。

      刪除
  4. 請問~在偵錯時說專案已過期是為甚麼呢~

    回覆刪除
  5. 你好,我下載的Lib檔案中是opencv_world331d.lib,我是自動把輸入裡面其他相依性的路徑也改成331嗎?

    另外,想要詢問如果跑出 main 在opencv.test.main.obj中已經定義過了(LNK2005),且說一個或以定義的符號(LNK1169)。請問是出了什麼問題。

    謝謝

    回覆刪除
    回覆
    1. 那個,我好像解決了。
      把下載的檔案名稱改成別的就沒有衝突了

      抱歉,打擾了

      刪除
    2. 不會啦,沒關係~解決就好

      刪除
  6. 請問一下 我一直開啟不了 來源檔案 這是?哈哈 不太懂
    #include

    回覆刪除
    回覆
    1. 中間環境變數圖片位置有錯,底下文字說明才是正確的,看看是不是這個的關係,改變環境變數後,要重啟VS2017

      刪除
  7. 你好,我想稍微問一下,按照了樓主的教學,我成功的安裝好了Opencv,但再按下F5後,並沒有顯示完整的圖片,而是出現灰色的畫布後,畫布閃一下,程式自動關閉,很像沒有觸發waitkey一樣。

    但我後來靠imwrite跑程式後,確實有產出一個正確完整的圖片,不知道是什麼原因? 謝謝

    回覆刪除
    回覆
    1. 想請問安裝的版本是範例中的版本嗎~

      可能有那裡有沒設定好或是怎麼樣,檢查一下有沒有把原本應該是 Debug 要用的檔案設定給 release 使用或是反過來之類的狀況。

      刪除
  8. 我的畫布也是閃一下就關閉了,不知如何解決。

    回覆刪除
  9. 我在開啟畫布加上這一列就可以看到了

    /* 開啟畫布 */
    namedWindow("Display window", WINDOW_AUTOSIZE);

    回覆刪除
    回覆
    1. waitKey(0); 本身就是暫停的功能了,我也不清楚沒有暫停的原因是什麼,按道理照著做應該會暫停的。
      > 不過有解決就好~其他人有問題的也可以試試看這一個方法

      為什麼不能按照原本的代碼暫停想請問
      1. 使用的opencv版本是否一致。
      2. 程式碼複製的時候是否漏了那一行。

      刪除
  10. 作者已經移除這則留言。

    回覆刪除
    回覆
    1. 沒錯呀 本文圖中剛建立的時候也是這樣,只有4個
      並不是對來源檔案按右鍵,可以參考本文圖中說明,點擊可看大圖。

      刪除
  11. 你好,請問我方案總管中只有 外部相依性/來源檔案/資料檔/標頭檔,其中的來源檔案就是原始程式檔嗎?

    回覆刪除
    回覆
    1. 更新一下你的VS,然後重建一個新專案,應該就一樣了

      刪除
    2. 是昨天才安裝好的2017

      刪除
    3. 了解~沒關係一樣的東西

      測試了一下全新安裝的名稱是你的那樣沒錯,我的可能是舊版本升級上的名稱是那樣。

      刪除
    4. 請問新增專案時空專案和WIN32的差別在哪裡?
      我利用你的測試碼時使用空專案無法建置,而使用WIN32才可以
      因為我自己有買書來看,但書上都是新增空專案來執行

      刪除
  12. 你好,我照上面的步驟做完之後按下F5,畫面一閃就結束了。
    我在程式碼尾端加上system("pause");後,畫面成功停住,但"OpenCv Test By:Charlotte.HonG"的視窗裡沒有圖形,我是否有哪個步驟做錯了呢?

    回覆刪除
    回覆
    1. 前面推文的方法試試看~我有加進文章了,你可以重新複製看看

      或者是加入
      namedWindow("OpenCV Test By:Charlotte.HonG", WINDOW_AUTOSIZE);

      刪除
    2. 文章的最開頭有懶人包,你試試看那個,裡面有我配置好的專案。
      如果懶人包執行是正常的,那應該就是其中一個步驟弄錯意思了。

      刪除
    3. 已成功顯示畫面了,感謝版主!

      刪除
    4. 最後是用哪個方法實現的

      刪除
    5. 是使用前面推文的方法完成的。

      刪除