引言
最近開始着手學習OpenCV,因此需要配置一個OpenCV(C++)的環境。這篇文章大部分內容轉載自網絡,我會進行一些整理,並且加入一些我配置環境時遇到的問題與解決方法。參考連接我會寫在文章末尾。
WARNING!!!實測使用本篇方法配置VSCode,會出現視頻流播放不了的問題,解決方法將於一周內更新。
環境
VScode我一直保持着最新版,因此版本隨意。
OpenCV的版本我選用的是當前最新(3版本),因為我喜歡用新的。
如果你之前用過MinGW配過VScode的C++環境,那關於配置MinGW的環節可以省略。如果沒有,我建議可以看這篇知乎文章的高贊回答。我的MinGW早就跟着這篇文章配好了(事實上也不用配置啥)
下面那段關於MinGW的配置僅供參考,我沒有看過那個界面,但最終配置是成功的。
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】
最后
這篇文章算是轉載自網絡,我只是把我配置環境時的過程和經歷糅合了進去,算是給自己留個日志吧。
OpenCV的學習之路,從配置環境開始,以后慢慢學嘍,嘿嘿[]~( ̄▽ ̄)~*