【OpenCV】VScode下的OpenCV配置
引言
最近开始着手学习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的学习之路,从配置环境开始,以后慢慢学喽,嘿嘿[]~( ̄▽ ̄)~*