2017年6月21日 星期三

[圖文] OpenCV 3.4.1 安裝配置在 Visual Studio 2017

[圖文] OpenCV 3.4.1 安裝配置在 Visual Studio 2017

想快速安裝可以從這邊,我有寫一個懶人包,執行就會自動幫你配置好專案的設置
https://charlottehong.blogspot.tw/2017/12/opencv320-contrib.html
以下本文(本站)內容的圖片點擊即可放大,ESC即可回到文章

正文開始

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


文件說明

build文件是官方已經幫你預先編譯好的檔案,開進去
C:\opencv\build\x64\vc15\bin
可以看到vc15 的字樣,這是給 visual studio 2017 用的。
總而言之會用到的只有
  • C:\opencv\build\include
  • C:\opencv\build\x64\vc15


部屬 OpenCV

首先只要做一次就好的是
  • 系統環境變數加入 bin 路徑
編譯器大概需要三個步驟(每次第一次開新專案)
  • 編譯器加入 include 路徑
  • 編譯器加入 lib 路徑
  • 編譯器加入 lib 檔案

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

搜索一下你的電腦環境變數或系統內容都可以(也可以直接對著本機按右鍵內容)
(點擊放大)位置是:C:\opencv\build\x64\vc15\bin
如果在設定環境變數之前就已經先打開 Visual Studio 的話,需要重新啟動 Visual Studio ,沒有重開編譯的時候會出現 “找不到**.dll檔案”

設定編譯器

打開新專案
選擇傳統式精靈,專案名稱就隨意打一個不影響
打勾空白專案,(這裡其實可選,文章為方便撰寫使用空白專案)
再來對著專案按右鍵新增檔案
可以改名字,這邊我就直接按新增了
再來要進入設定裡面設置,留意一下紫色的框框待會會用到
乾!悲劇了,以下 紫色框框均要選 x64 模式 因為OpenCV 提供的預編檔案只有x64
乾!悲劇了,以下 紫色框框均要選 x64 模式 因為OpenCV 提供的預編檔案只有x64
乾!悲劇了,以下 紫色框框均要選 x64 模式 因為OpenCV 提供的預編檔案只有x64
進來之後對照一下紫色框框,兩個要一樣才有用(總共會有4種組合)
貼上include的路徑:C:\opencv\build\include
這裡貼上 lib 的路徑:C:\opencv\build\x64\vc15\lib
一樣留意一下紫色的框框
這裡需要指定引入那些 *.lib 檔案
我們進來opencv的文件裡面看
根據你的模式設定(留意紫色框框)
好了之後貼上測試代碼
/**********************************************************
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)
如果你做到這邊才發現錯了,要回去重做,設定裡面 x86->x64 改了全部會歸零歐

運行

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


其他

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

47 則留言:

  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. 是使用前面推文的方法完成的。

      刪除
  13. Visual Studio 2017 我測試應該要用vc15,用vc14會有無法開啟錯誤

    回覆刪除
    回覆
    1. 感謝提醒,因為 VS2017 橫跨了兩個版本(內部版本是 14.0 與 14.1),文章沒更新。(我其實也沒注意到有多這個文件)

      在2017年的時候使用 opencv320 是 VC14 的文件,後來改版後的opencv341內有 VC15 與 VC14 。

      VS2017 -> VC15 文件
      VS2015 -> VC14 文件

      刪除
  14. 感谢您分享这篇文章,不知可否摘取其中部分内容(方法和代码)进行转载?我会在转载中注明本文地址。(PS:看到上面一条留言说 VC14 和 VC15 的问题,我这边 vs2017 使用 VC14是正常的,仅此一提,大家还是要自行测试一下)

    回覆刪除
    回覆
    1. 好的 請保留ID及原文網址~~(不過沒有科學上網是不是連不過來啊QuQ)

      我是還沒實際跑 15 跟 14 的差異,根據我在安裝 cuda9.0 的時候因為 VS2017 版本的更新導致不能用,必須從 14.1 降版到 14.0,直覺就覺得說或許 vc15 是給內和版本 14.1 用的;這幾天跑跑看會在更新結果。

      刪除
    2. 哇,感谢。是要科学上网才行(很不方便(T_T)),大陆找到一些文章都不太实用。看您博客有好多好文章,以后会常常访问,再次感谢。

      刪除
  15. 感謝大大~ 找了一堆資料 照著這個做終於成功

    回覆刪除