【OpenCV】VScode下的OpenCV配置


引言

  最近開始着手學習OpenCV,因此需要配置一個OpenCV(C++)的環境。這篇文章大部分內容轉載自網絡,我會進行一些整理,並且加入一些我配置環境時遇到的問題與解決方法。參考連接我會寫在文章末尾。

   WARNING!!!實測使用本篇方法配置VSCode,會出現視頻流播放不了的問題,解決方法將於一周內更新。


環境

Visual Studio Code

VScode我一直保持着最新版,因此版本隨意。

OpenCV - 3.4.11

OpenCV的版本我選用的是當前最新(3版本),因為我喜歡用新的。

MinGw - 8.1.0

如果你之前用過MinGW配過VScode的C++環境,那關於配置MinGW的環節可以省略。如果沒有,我建議可以看這篇知乎文章的高贊回答。我的MinGW早就跟着這篇文章配好了(事實上也不用配置啥)

下面那段關於MinGW的配置僅供參考,我沒有看過那個界面,但最終配置是成功的。

cmake-3.18.3

cmake我也是當前最新版。


步驟

1、Visual Studio Code 配置

安裝 C/C++ 插件
在這里插入圖片描述


2、openCV 配置

將opencv-3.4.11-vc14_vc15.exe 隨便解壓到除C盤外的其他盤內(若是C盤,cmake 時很可能報錯),注意放置opencv文件夾的文件路徑不要有空格,最好也不要有中文。

 opencv\build\x64 路徑下新建一個文件夾(名字隨意,這里是 MinGW )

 

 

 


3、MinGw 配置

在這里插入圖片描述

  • (版本)Version 選擇 5.3.0
  • (架構)Architecture 32位cpu 選擇 i686,64位cpu 選擇 x86_64
  • (線程模式)Threads 如果使用 posix api 選擇 posix,如果使用 win32 api 選擇win32
  • (異常處理機制) Exception 有三種,根據機器情況進行選擇
    • SJLJ (setjmp/longjmp) 兼容性好,32位或64位架構都可以使用,但速度慢
    • DWARF (DW2, dwarf-2) 速度比SJLJ快,但只能用於32位架構,且有bug,盡量不用
    • SEH (zero overhead exception) 速度很快,但只能用於64位架構
      (編譯版本)Build revision 選擇最高的

如果你是 win10下的64位系統 建議選擇 與圖像上一致的選項。

配置環境變量 path :

新增 C:\Program Files\mingw-w64\x86_64-5.3.0-posix-seh-rt_v4-rev0\mingw64\bin

檢查是否配置成功:
win鍵 + R 輸入 cmd 打開 dos 框,輸入gcc --version

若出現上訴畫面,則配置成功


4、 cmake 配置

配置環境變量 path :

(新增 C:\Program Files (x86)\cmake-3.9.0-rc3-win64-x64\bin

事實上,安裝cmake時可以勾選自動幫配置環境變量,這樣就不用去手動配了。

我路徑配在了F:\Program Files\CMake\bin下。

 


運行 cmake (cmake-gui.exe)

如上圖所示

 

where is the source code: 選擇

 

where to build the binaries: 選擇


點擊 configure 按鈕,按照下圖所示進行選擇
在這里插入圖片描述
選擇 MinGW 中的 C 和 C++ 編譯的exe程序

  我的路徑: C:\mingw64\bin

  C:gcc.exe
  C++ : g++.exe

  )

總之此處就是要選擇mingw64\bin下的gcc.exe和g++.exe編譯程序。
在這里插入圖片描述

 

在點擊Finish之前,請檢查如下事項!!!

1、使用 cmake 時要求安裝 python3(版本沒有限制,比2高就行),並且python 必須配好了環境變量。

2、放置opencv這個文件夾時,一定不要有空格!!你要是加入了空格,在待會執行minGW32-make.exe時,就會產生文件讀取路徑找不到的問題。我原來把opencv放在program files這個文件夾下,結果后面程序讀取路徑時居然沒讀到“program”,只讀到“ files”,文件路徑不完整,出錯終止。

 

點擊 Finish,耐心等待進度條讀完,直到輸出窗口看到 Configuring done。再次點擊 Configure 等待進度條讀完。之后點擊Generate 等待進度條讀完,出現 Generating done。

這時,可以看到 opencv\build\x64\MinGW 的文件夾下新增了好多東西。

在dos框(windows power shell 也可以)里,利用 cd 命令切換到F:\Tools\opencv\build\x64\MinGW(或者你也可以在該文件頁面下按住Shift+右鍵,打開windows power shel),輸入 minGW32-make 命令(一般來講,輸入min后點擊Tab,程序會幫你自動補全),這個時候大概花費 40 分鍾左右的時間來編譯(真的要這么久,慢慢等吧(っ °Д °;)っ)

 

我在編譯到百分之42的時候,出現了以下類似錯誤(報錯我不記得記錄了,以下報錯信息我在網上找的,內容大致相同)

[ 39%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/mean.avx2.cpp.obj
[ 39%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/merge.avx2.cpp.obj
[ 40%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/split.avx2.cpp.obj
[ 40%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/sum.avx2.cpp.obj
[ 40%] Building RC object modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj
gcc: error: long: No such file or directory
C:\PROGRA~1\MINGW-~1\X86_64~1.0-P\mingw64\bin\windres.exe: preprocessing failed.
mingw32-make[2]: *** [modules\core\CMakeFiles\opencv_core.dir\build.make:1492: modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj] Error 1
mingw32-make[2]: *** Waiting for unfinished jobs....
mingw32-make[1]: *** [CMakeFiles\Makefile2:1844: modules/core/CMakeFiles/opencv_core.dir/all] Error 2
mingw32-make: *** [Makefile:179: all] Error 2

網上找了找資料,大概說的是,對應文件路徑下的vs_version.rc.obj沒有成功生成,可是我去對應文件夾里找了找,發現其實是生成了一個叫vs_version.rc的文件,少了個后綴.obj。

於是我手動給這個文件加上了.obj的后綴,再次運行 minGW32-make 命令,這次雖然沒報上面的錯誤,但提示要下載dll,且無論網絡環境如何,均下載失敗。

又去網上找攻略,對於這個vs_version.rc.obj文件報錯問題,解決方法是將CMake中的 OPENCV/OPENCV_ENABLE_ALLOCATOR_STATS 不打勾,就像下圖所示,你可以在search中搜索。

 

取消打勾后,再來一遍configure和generate,並再次用 minGW32-make 命令編譯(如果你沒有關閉windows power shel,按上鍵並運行,能節省一些重復編譯的時間),我這里的問題就解決了。

 

為什么這時候才說?因為在別家的教程里,我並沒有看到這個問題。產生的原因暫且不明,可能是各個配置文件的版本差異。我希望你配置的時候不要遇到上述問題,也希望你一旦遇到上述問題,能用我的經驗解決。

 

編譯完成之后,輸入 minGW32-make install 來完成裝載。
  
最后,配置環境變量 path :

新增 F:Tools\opencv\build\x64\MinGW\bin


 

三個環境變量總結如下圖:

 

 

 設置路徑這種事,懂得都懂,自己配的環境,就有自己文件的路徑。

 

5、項目配置

在vsCode中打開文件夾

 

 

 我新建了一個名為VScode_OpenCV的文件夾,專門用來放置我的OpenCV項目。

 

 

 



新建 test.cpp,copy如下代碼

 1 #include<opencv2/opencv.hpp>
 2 #include<opencv2/highgui.hpp>
 3 using namespace cv;
 4 int main()
 5 {
 6     Mat img=imread("test.jpg");
 7     namedWindow("我的窗口",WINDOW_AUTOSIZE);
 8     imshow("我的窗口",img);
 9     waitKey(0);
10     destroyWindow("我的窗口");
11     system("pause");
12     return 0;
13 }
如下圖所示

 

運行下,應該會報錯並提示你生成 launch.json 文件,copy下面代碼復制到 launch.json 中,將 "miDebuggerPath" 改成自己的。

 1 {
 2     // 使用 IntelliSense 了解相關屬性。 
 3     // 懸停以查看現有屬性的描述。
 4     // 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387
 5     "version": "0.2.0",
 6     "configurations": [
 7         {
 8             "name": "gdb.exe - 生成和調試活動文件",
 9             "type": "cppdbg",
10             "request": "launch",
11             "program": "${fileDirname}\\${fileBasenameNoExtension}.o",
12             "args": [],
13             "stopAtEntry": false,
14             "cwd": "${workspaceFolder}",
15             "environment": [],
16             "externalConsole": true,
17             "MIMode": "gdb",
18             "miDebuggerPath": "C:\\mingw64\\bin\\gdb.exe",//改成你的mingw64的gdb.exe路徑
19             "setupCommands": [
20                 {
21                     "description": "為 gdb 啟用整齊打印",
22                     "text": "-enable-pretty-printing",
23                     "ignoreFailures": true
24                 }
25             ],
26             "preLaunchTask": "g++",
27         }
28     ]
29 }
 
        

.vscode 文件夾(launch.json 的父目錄)下,新建 c_cpp_properties.json,(這個json文件主要是能讓VScode找到opencv的頭文件)copy 如下代碼,修改includePath的后三個路徑為自己的,compilerPath 同理。

 1 {
 2     "configurations": [
 3         {
 4             "name": "win",
 5             "includePath": [
 6                 "${workspaceFolder}/**",
 7                 "F:\\Tools\\opencv\\build\\include",
 8                 "F:\\Tools\\opencv\\build\\include\\opencv2",
 9                 "F:\\Tools\\opencv\\build\\include\\opencv"                
10             ],
11             "defines": [],
12             "compilerPath": "C:\\mingw64\\bin\\gdb.exe",
13             "cStandard": "c11",
14             "cppStandard": "c++17",
15             "intelliSenseMode": "clang-x64"
16         }
17     ],
18     "version": 4
19 }

 

.vscode 文件夾(launch.json 的父目錄)下,新建 tasks.json,(這個json文件主要是用來設置編譯)copy以下代碼,修改 “-I” 和 “-L” 的路徑。

 1 {
 2     // See https://go.microsoft.com/fwlink/?LinkId=733558
 3     // for the documentation about the tasks.json format
 4     "version": "2.0.0",
 5     "command": "g++",
 6     "args": [
 7         "-g", 
 8         "-std=c++11", 
 9         "${file}", 
10         "-o", 
11         "${fileBasenameNoExtension}.o",  
12         "-I", "F:\\Tools\\opencv\\build\\include",
13         "-I", "F:\\Tools\\opencv\\build\\include\\opencv2",
14         "-I", "F:\\Tools\\opencv\\build\\include\\opencv",
15         "-L", "F:\\Tools\\opencv\\build\\x64\\MinGW\\lib",
16         "-l", "opencv_core3411",
17         "-l", "opencv_imgproc3411",
18         "-l", "opencv_imgcodecs3411",
19         "-l", "opencv_video3411",
20         "-l", "opencv_ml3411",
21         "-l", "opencv_highgui3411",
22         "-l", "opencv_objdetect3411",
23         "-l", "opencv_flann3411",
24         "-l", "opencv_imgcodecs3411",
25         "-l", "opencv_photo3411",
26         "-l", "opencv_videoio3411"
27   
28     ],// 編譯命令參數
29     "problemMatcher":{
30         "owner": "cpp",
31         "fileLocation":[
32             "relative",
33             "${workspaceFolder}"
34         ],
35         "pattern":[
36             {
37                 "regexp": "^([^\\\\s].*)\\\\((\\\\d+,\\\\d+)\\\\):\\\\s*(.*)$",
38                 "file": 1,
39                 "location": 2,
40                 "message": 3
41             }
42         ]
43     },
44     "group": {
45         "kind": "build",
46         "isDefault": true
47     }
48   }

注意:如果是使用其他版本的OpenCV,把tasks.json中的3411改為相應版本號;

比如使用:OpenCV3.4.6;就把3411改為346。

 

如此,就可以按 F5 運行 test.cpp,展示一張你選擇的圖片(我這張圖片尺寸有點大)。

 

 注意生成的執行文件后綴是.o,而不是.exe,所以在launch.json里program的值為"${fileDirname}\\${fileBasenameNoExtension}.o",


6、參考鏈接

將 VSCode 打造成 OpenCV 的 IDE(C++,window10 1803)

windows系統【VSCode搭建OpenCV、C++開發環境】

Win10下Qt+OpenCV+Cmake編譯錯誤記錄與解決【gcc: error: long: No such file or directory】

VScode搭建OpenCV環境

最后

這篇文章算是轉載自網絡,我只是把我配置環境時的過程和經歷糅合了進去,算是給自己留個日志吧。

OpenCV的學習之路,從配置環境開始,以后慢慢學嘍,嘿嘿[]~( ̄▽ ̄)~*


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM