【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的学习之路,从配置环境开始,以后慢慢学喽,嘿嘿[]~( ̄▽ ̄)~*

posted @ 2020-10-02 18:43  吃土poQAQ  阅读(7509)  评论(1编辑  收藏  举报