突然發現我已經好一段時間沒有發過文章了,著實是這幾個月發生太多事情,也太忙,連原本前陣子在玩的LINE都沒時間寫上去,現在又接者新東西來,所以積欠的就讓我慢慢補上囉。
最近公司開始要玩起影像相關的,而影像相關的就不得不提當前最紅的OpenCV,相信我,你去書店找過一輪你就會發現,大部分跟影像相關的都會扯到這個OpenSource,不過就如同每個新玩具一樣,都會遇到一個共同的痛點,那就是環境設置。
所以,第一篇我想先介紹一下環境配置,接下來在開始慢慢深入這個軟體,其中包含會拿這玩意做一些影像處理、AI相關,更或者會開始玩一些壓縮之類的。
如果你喜歡的話,就請繼續持續關注囉,那麼,我們開始吧。
[Step1. 軟體下載]
OpenCV401 : https://sourceforge.net/projects/opencvlibrary/files/4.0.1/opencv-4.0.1-vc14_vc15.exe/download
工欲善其事,必先利其器,所以我們就先到官方網站上下載OpenCV,而你在官網上應該會看到很多不同版本,但我還是建議你先拿舊的來使用,因為畢竟新東西總是需要一堆白老鼠去嘗試才能趨近於穩定,而舊的就沒這個困擾。
下載好後,還是建議各位觀眾跟者我操作,畢竟設環境這玩意,如果不是安裝包的話,很容易東漏漏西漏漏,最後再跑來問說該怎麼辦。
那個時候其實我也不知道該怎麼救你各位,我也只能盲猜瞎猜,所以為了避免這尷尬的狀況,所以最保險的情況還是照做吧。(之後所有的路徑你們都可以直接複製貼上)
直接安裝在C曹
安裝 Opencv-4.0.1-cv14_cv15,會產生opencv這個資料夾,所以請不要自作主張新增這個資料夾,因為這會讓你之後的目錄多一層opencv\opencv\....。
[Step2. 文件說明]
我們路徑會是一樣的,所以你可以直接去找,OpenCV只有x64而已,而裡面的vc14 & vc15就是我們要的,如果你是2015,那接下來只要有vcxx的地方,就使用vc14,如果你是2017 & 2019,則使用vc15。
2017我實測過是沒有問題,2019原則上應該也不會有,大家可以試試看,不然就是等我老大安裝,然後等他回報XD。
[Step3. 建置環境]
這裡我建議要很認真看,真的要很認真,最好一個步驟都不要漏掉,因為通常設置不成功,有9成都是因為這邊出錯,而這是一次性的工作,設置好之後這台電腦就不用再設置了。
對左下角的開始按右鍵→打開管理員模式的powershell。
輸入下面的指令
1.
[System.Environment]::SetEnvironmentVariable("PATH", $Env:Path + ";C:\opencv\build\x64\vc15\bin", "Machine")
2.
[environment]::GetEnvironmentVariable("PATH", "Machine")
第一條是設置環境變數,第二條是確認是否有成功,接下來你會在圖片上看到3那邊有設置好的環境變數。
注意:
1.如果這個地方沒有做好,之後在include .lib的會錯誤。
2.如果你有打開VS,請關閉,如果已經先打開,這裡做完請全部關閉在啟動。
3.終端機要用管理權限打開,不然指令會沒有作用。
接下來你要打開你的Visual Studio 2017(2019),然後創一個新專案,然後選擇console的就好,我們盡量把事情簡單化,之後再慢慢加。
專案名稱可以隨便打(cvTest),然後打開檢視→屬性管理員(View->Property Manager)
看到了後,我們對者Debug|X64按下右鍵,Add New Project Projecty Sheet->名稱打: opencv401d.props (這裡不要亂改)
好了之後點他兩下會彈出一個視窗
加入 include 路徑 和 lib 路徑
include目錄的最前面加上 C:\opencv\build\include;
函式庫目錄最前面加上 C:\opencv\build\x64\vc15\lib;
(他原本是有東西的,原本的東西要留著中間用分號隔開)
加入 lib 檔案
這邊點那個小三角,在按編輯
然後輸入 opencv_world401d.lib
這邊補充說明一下 opencv_world401d.lib 中的 401 是 opencv 的版本 4.0.1版本,如果下載的是別的版本,記得要自己修正。
[Step4. 程式測試]
接下來我們寫點程式吧 !
#include
#include
using namespace cv;
int main()
{
/* 畫布 */
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;
}
接下來我們寫點程式吧 !
確認自己是不是在Debug + x64的環境!
這樣恭喜你已經完成了設置了,之後你這台電腦基本上就不需要再重新用了,記得,Release的地方也要重覆剛剛的步驟。
而在 release 最後面加入lib的時候要使用沒有 d 結尾的 `opencv_world401.lib,才是正確的檔案,這邊設置錯誤會無法編譯。
設置完畢代碼不需要更動,編譯的時候VS上方從 debug/x64 模式更改為 release/x64 模式即可
[Step5. 重覆使用]
現在已經設置完畢了,並且你會發現,在你的專案目錄會有一個 opencv401d.props
剛剛要你不要更改就是因為連同版本號一起打上來,這樣比較好識別。
這個把他複製出來存好,他是可以重複使用的
下次開別的新專案直接新增進來就好,完全不用再設置opencv。
使用方式的話,就是把這個檔案加入到專案裡面,但是有一點要注意,那就是如果要使用的話,還是建議複製一份過去,畢竟專案跟專案不要有太多相依性是基本原則。