###### tags: `東京威力 TEL` # I. 影像辨識 OpenCV >OpenCV 是拿來處理影響辨識的,用Python環境寫在環境設置上比較方便。 >但考慮算力問題、程式執行效率對影像延遲問題,我先用 C++ 編寫。 :::spoiler C++和Python實際上在影像延遲的差距仍不確定,待測。 ::: ## <font color="orange"> 01. VS Code x Cpp x OpenCV</font> ### <font color="pink">1-1. 安裝 OpenCV</font> 點 [這裡](https://github.com/huihut/OpenCV-MinGW-Build),下載 `OpenCV-4.5.5-x604`。 ![](https://i.imgur.com/APs8rQj.png =70%x) 下載後將檔案們解壓縮到<font color="yellow">某個自己知道是哪裡</font>的地方。 ### <font color="pink">1-2. 安裝 Mingw 64</font> 參考 [之前寫的筆記](https://hackmd.io/@925/By2l-6oU9/%2Fs%2F0kISXK7XQwyYUWtWAKW-9A#-2-2-mingw64-%E5%AE%89%E8%A3%9D) 即可。 ### <font color="pink">1-3. 檔案路徑設置</font> 接下來要設定環境變數和 VS Code的 json 檔案,剛下載的資料夾可以放在自己喜歡的地方,但要注意檔案對應的路徑要和下方一樣。 首先,進入「進階系統設定」調整「環境變數」。 ![](https://i.imgur.com/CI03v0Z.png =80%x) 接著將下方圖示框起來的兩個資料夾新增到「系統變數」的「Path」中。 ![](https://i.imgur.com/iKNblff.png =85%x) :::info Mingw_openCV是我自己建立的資料夾,檔案具體上要放哪裡依照自己習慣即可,只要注意後續路徑對應的資料夾(也就是剛下載的檔案)是相同的即可。 ::: ### <font color="pink">1-4. json 檔案設置</font> :::warning 注意以下的 json 路徑設置要自行修改成對應的檔案路徑。 ::: 在 `.vscode` 資料夾內新增或修改以下幾個檔案 <font color="yellow">(檔名不可修改)</font>,完成後會如下所示: ![](https://i.imgur.com/4ZvlxIk.png =45%x) :::info 開一個獨立的OpenCV資料夾,然後以這個資料夾為工作區打開(如上圖所示)會比較安全。 因為OpenCV要用的編譯和平常的程式檔不一樣,如果不熟悉 .json 檔案的話這樣比較不會弄錯。 ::: `c_cpp_properties.json` ``` json= // c_cpp_properties.json { "configurations": [ { "name": "Win32", "compilerPath": "C:\\msys64\\mingw64\\bin\\g++.exe", "includePath": [ "${workspaceRoot}", "C:\\msys64\\mingw64\\include", "C:\\msys64\\mingw64\\lib\\gcc\\x86_64-w64-mingw32\\11.2.0\\include", "C:\\msys64\\mingw64\\include\\c++", "D:\\Mingw_openCV\\OpenCV-MinGW-Build-OpenCV-4.5.5-x64\\include" ], "defines": [ "_DEBUG", "UNICODE", "__GNUC__=5", "__cdecl=__attribute__((__cdecl__))" ], "intelliSenseMode": "clang-x64", "browse": { "path": [ "${workspaceRoot}", "C:\\msys64\\mingw64\\include", "C:\\msys64\\mingw64\\lib\\gcc\\x86_64-w64-mingw32\\11.2.0\\include", "C:\\msys64\\mingw64\\include\\c++" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" } } ], "version": 4 } ``` `launch.json` ```json= // launch.json { "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceRoot}/${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceRoot}", "environment": [], "externalConsole": true, "MIMode": "gdb", "miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "build" } ] } ``` `settings.json` ```json= // settings.json { "files.associations": { "array": "cpp", "atomic": "cpp", "bit": "cpp", "*.tcc": "cpp", "cctype": "cpp", "clocale": "cpp", "cmath": "cpp", "compare": "cpp", "concepts": "cpp", "cstdarg": "cpp", "cstddef": "cpp", "cstdint": "cpp", "cstdio": "cpp", "cstdlib": "cpp", "cwchar": "cpp", "cwctype": "cpp", "deque": "cpp", "string": "cpp", "unordered_map": "cpp", "vector": "cpp", "exception": "cpp", "algorithm": "cpp", "functional": "cpp", "iterator": "cpp", "memory": "cpp", "memory_resource": "cpp", "numeric": "cpp", "random": "cpp", "string_view": "cpp", "system_error": "cpp", "tuple": "cpp", "type_traits": "cpp", "utility": "cpp", "initializer_list": "cpp", "iosfwd": "cpp", "iostream": "cpp", "istream": "cpp", "limits": "cpp", "new": "cpp", "numbers": "cpp", "ostream": "cpp", "stdexcept": "cpp", "streambuf": "cpp", "typeinfo": "cpp" } } ``` `tasks.json` ```json= // tasks.json { "version": "2.0.0", "tasks": [ { "label": "OpenCV", "type": "shell", "command": "g++", "args": [ "-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe", "-I", "D:\\Mingw_openCV\\OpenCV-MinGW-Build-OpenCV-4.5.5-x64\\include", "-L","D:\\Mingw_openCV\\OpenCV-MinGW-Build-OpenCV-4.5.5-x64\\x64\\mingw\\bin", "-llibopencv_calib3d455", "-llibopencv_core455", "-llibopencv_dnn455", "-llibopencv_features2d455", "-llibopencv_flann455", "-llibopencv_highgui455", "-llibopencv_imgcodecs455", "-llibopencv_imgproc455", "-llibopencv_ml455", "-llibopencv_objdetect455", "-llibopencv_photo455", "-llibopencv_stitching455", "-llibopencv_video455", "-llibopencv_videoio455" ], "group": { "kind": "build", "isDefault": true } } ] } ``` ### <font color="pink">1-5. 初步程式測試</font> 新建一個程式檔 `testing.cpp` 如下: ```c++= #include <iostream> #include <cstdlib> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main(){ Mat image = imread("smile.jpg"); // smile.jpg 為圖片檔名,名字自取。 while(true){ imshow("live" , image); if(waitKey(0) == 'N') //執行程式後,點一下圖片,再輸入 N 就會結束迴圈。 break; } return 0; } ``` 接著隨便將一張照片放到這個工作區內。 建置檔案一樣 `ctrl+shift+B`: ![](https://i.imgur.com/Wixb6xN.png =80%x) 然後拖曳程式執行檔至 pwsh 內再按 `enter`。 ![](https://i.imgur.com/tjq0WEn.png =85%x) 有出現圖片就代表成功建置好環境,沒跑出來可以重開 VS Code 試試看。