2021年1月6日 星期三

[圖文] OpenCV 永久配置在 VisualStudio 開新專案不用重新配置

[圖文] OpenCV4.5.1 永久配置在 VisualStudio 2019 開新專案不用重新配置

繼上一篇 [圖文] OpenCV 4.0.1 安裝配置在 Visual Studio 2019
https://charlottehong.blogspot.com/2019/02/opencv-401-visual-studio-2019.html

採用的方法已經是比較省麻煩的可以把設定檔存下來,但終究還是需要複製設置檔案,有沒有辦法可以一勞永逸呢?永遠不需要在 Visual Studio 2019 配置 opencv 一開新專案直接就是載入好的狀態呢?

其實是可以的,只是這個方法不是很建議。用這個方法要留點心知道自己在幹嘛,一旦配置到預設系統之後,就會一直是載入的狀態,在某些極端情況下可能會造成bug。

新手剛學倒是無所謂接觸到的代碼都是簡單的,最重要的減低每次都要設定的痛苦趕快進入狀態,這就很適合這樣直接設定在全域。


本文最後有懶人包,懶人包就是你直接點擊兩下安裝自動完全本文所介紹的一切,重啟VisualStudio後直接就搞定可執行,

下載opencv





官方載點:https://sourceforge.net/projects/opencvlibrary/files/4.5.1/opencv-4.5.1-vc14_vc15.exe/download

載點刻意帶版本號是為了避免因為檔名問題導致錯誤發生,非必要建議直接用相同版本。(版本號不同底下文件要修改內文代碼) 

下載完畢後,預設安裝位置是原地解壓縮,為了對應文章路徑,把它安裝到 C:\ 。
(建議是別改了,後面的程序都寫好了,改了要自己慢慢去對一一修改)

加入環境變數

免了整合在內設定檔內了。

Visual Studio 2019 內部設定檔

檔案位置存在這裡

%USERPROFILE%\AppData\Local\Microsoft\MSBuild\v4.0

他是路徑只是長得有點怪,直接複製貼在資料夾路徑上前往
進來後理應會看到三個東西(沒有的話自己新建一個同檔名的)


然後其中就是我們的主角 Microsoft.Cpp.x64.user.props 預設裡面很空

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <ImportGroup Label="PropertySheets">
 </ImportGroup>
 <PropertyGroup Label="UserMacros" />
 <PropertyGroup />
 <ItemDefinitionGroup />
 <ItemGroup />
</Project>

這邊幫大家備份一份吧,丟了可以來這裡找。
再來是改動後的檔案,詳細就不介紹了,花點時間可以看懂的。

因為有點長我外貼到gist去,詳細從這邊複製
https://gist.github.com/hunandy14/c5a74e769bd29be3c6a36b139f044573

開頭部分稍微看一下,如果版本不同要自己改版本名(本文撰寫時是4.5.1版本)
如果換位置也要更換,裡面有中文註解寫在裡面,照著註解改位置就可以了

貼上之後存檔就完工了。

創建檔案測試

建立專案


選擇空白專案

隨意打一個名稱下一步


進來之後先調上面的 Release / x64 這裡不條會跳錯,而且很容易忘記

然後創建檔案


檔名隨意吧

再來輸入測試程序

/**********************************************************
Name :
Date : 2016/05/29
By : CharlotteHonG
Final: 2016/05/29
來源:https://charlottehong.blogspot.com/2019/02/opencv-401-visual-studio-2019.html
**********************************************************/
#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;
}


貼好會像這個樣子

再次確認上方有沒有條錯



按F5 很神奇的什麼都沒設置就可以用了


懶人包

已經懶到不能再覽了,只需要你好好的VS裝好,然後執行這包就可以用了。
(包含OpenCV也整合進去了,不用另外載直接無腦裝到好)

懶人包安裝完畢之後會自動彈出測試的專案資料夾,打開可以直接按F5編譯測試。

https://bit.ly/3omNHOh

6 則留言:

  1. 不好意思,請問我在讀圖的時候遇到這個error message
    上面的程式碼都可以跑出來
    但讀圖時卻不行
    請問是發生什麼事了QQ
    Exception thrown at 0x00007FFC5CA7A388 in filter_practice.exe: Microsoft C++ exception: cv::Exception at memory location 0x000000517CCFF4E0.
    Unhandled exception at 0x00007FFC5CA7A388 in filter_practice.exe: Microsoft C++ exception: cv::Exception at memory location 0x000000517CCFF4E0.

    回覆刪除
    回覆
    1. 貼完整程式碼出來我跑看看,先確定不是代碼問題在排除是不是設定錯了。

      刪除
  2. 我在讀圖得時候遇到一樣的問題QQ
    0x00007FFC76273B29 中 (於 hallo opencv.exe) 發生未處理的例外狀況: Microsoft C++ 發生例外狀況: cv::Exception (記憶體位置 0x00000025992FF480)。

    程式碼:
    #include
    #include
    using namespace cv;

    int main() {

    Mat img=imread("0.jpg",1);

    namedWindow("dog", WINDOW_AUTOSIZE);
    imshow("dog", img);
    waitKey(0);

    return 0;
    }

    回覆刪除
    回覆
    1. 文中給的預設測試代碼跑出來是正常的嗎?
      只有讀圖失敗其他可以嗎?

      刪除
    2. 我這邊複製代碼測試是成功可以跑得。

      1. 下載懶人包安裝(避免設置錯誤)
      2. 記得調整到 x64 模式預設是不包含 x86的

      另外從錯誤信息可以看到 cv::Exception 這個訊息,這是執行中錯誤,表示環境都OK正常了。執行錯誤的意思是,比如說沒放圖、圖檔名打錯之類的就會噴例外。

      刪除
    3. 嘗試把圖片移除之後,確實獲得同樣的錯誤訊息。
      那就表示你的環境應該已經設置成功了^^

      看噴例外的是哪一條代碼,那條例外什麼意思處理掉就可以了~

      刪除