日期:2021/4/24
本篇博客对在Win10下使用VSCode+mingw+cmake的组合配置OpenCV3环境进行了总结,相比于同主题下的其他博客,有以下不同:
OS - win10
vscode
- 1.55.2
mingw-w64
- 8.1.0
cmake
- 3.20.1
opencv
- 3.4.14
【作者注】VSCode生态非常完善,强烈建议有一定英语基础的读者直接参照VSCode官方文档Docs进行安装;阅读有困难的读者可以同时对比阅读Docs和网上的博客教程进行安装。
进入 VSCode 官网 ,查看官方文档Docs,左侧导航栏点击SETUP,在展开菜单点击Windows,按照右侧Installation流程1-2-3完成即可,注意下面Tip的内容,可以用code .
检验一下环境变量是否添加成功。
左侧导航栏点击LANGUAGES,在展开菜单中点击C++
按照最右侧IN THIS ARTICLE
标题下面的流程进行,其中的主要步骤如下:
安装C/C++扩展(Install the extension
)
安装编译器(Install a compiler
)
(如果此处读者觉得Docs中对mingw-w86的安装示例过于简略,可以跳转到 2.mingw-w86 标题阅读相关内容)
编译并运行第一个程序(Hello World
)
看完Hello World
再往下拉会有一个Tutorials
目录,它提示我们根据自己的环境查看对应的教程,因为我们是在Win10
操作系统中安装了MinGW-W64
这种GCC,所以点击第一个超链接GCC on Windows via MinGW
。
【作者注】: 值得一提的是,MinGW
和MinGW-W64
其实是两个不同的软件(项目),这里的超链接写的虽然是MinGW
,但点进去发现实际上使用的是MinGW-W64
。关于两者的联系和区别,有兴趣的读者可以参考维基百科 MinGW
继续上面的说,点击超链接后跳转到如下页面(不点超链接也可以通过左侧导航栏C++
菜单中GCC on Windows
跳转),下图中橙色方框即验证了上面所说,即实际使用的是MinGW-W64
项目。
在这个教程中,我们仍按照最右侧IN THIS ARTICLE
标题下面的流程进行,有些步骤我们已经做过,剩下的主要步骤如下:
Create Hello World
Build helloworld.cpp
Debug helloworld.cpp
C/C++ configurations
在Create Hello World
模块中,有关于 配置文件 的说明(如下图),它提示我们在“workspace”中有一个.vscode
文件夹,里面有3个基本的 .json 配置文件,各自的作用标在括号里。
这3个配置文件分别对应于上述主要步骤的第2、3、4步,每一步对其中一个配置文件内的参数作用都做了详细说明,按照Docs配置即可。
恭喜你!将这一篇教程从头至尾跟下来,你已经掌握了如何用 VSCode 编译 、 调试 和 运行 C/C++程序了。
【作者注】:需求决定方法
进入 mingw-w64官网 中点击download
跳转后,下拉页面,点击我们需要的版本
跳转后,点击安装超链接
【作者注】{Sourceforge是一个类似于国内百度网盘的云盘,很多开源软件都存储在上面}
跳转后,网页会显示5s倒计时(图中上方红框),倒计时结束后自动开始下载(若未自动开始下载,请使用离线安装方式)。注意此时下载的是mingw-w86 install,是一个在线安装包,安装过程需要链接远程服务器,有些读者的网络下载速度可能受限,也可以考虑使用离线安装方式。
无论在线/离线安装,都有以下主要步骤,可参照官方文档Docs:
安装“配置合适”的mingw-w64
(1)在线安装方式
安装包下载完成后,即可按照VSCode官网Docs里面的教程操作。
(2)离线安装方式
在sourceforce中点击Files
,下拉并选取我们需要的版本。教程中的mingw-w86版本如下,按照教程选取即可:
x86_64-8.1.0-posix-seh-rt_v6-rev0
添加环境变量
注意:在线/离线安装方式均需要手动添加环境变量
检查是否安装成功
各个参数的简要说明如下(*选读)
8.1.0
;i686
:用于 32 位操作系统x86_64
:用于 64 位操作系统win32
: 不支持C ++ 11多线程特性, 使用 win32 apiposix
: 支持C ++ 11多线程特性,使用 posix apiSJLJ
: 兼容 32 位和 64 位操作系统,DWARF
:专用于 32 位操作系统SEH
: 专用于64 位操作系统1
优先0
SEH
的Build revision
只有0
)【作者注】:{网上有些mingw安装教程认为:“win32是用来编写在Windows平台上运行程序的,而posix是用来编写在类Unix平台上运行程序的,所以在win10系统应该装win32版本”。作者之前在vscode上配的也一直是win32版本的,可以正常使用。但是这次我们要在VSCode平台配置opencv环境,需要重新编译opencv的源程序,而这又需要支持C++11标准的编译器才可以,否则在后面CMake环节会出现种种编译错误,所以此处我们按照VSCode官方Docs中的示例,选择posix
线程模型即可。关于两种线程模型的更多详细信息,可参考win32和posix}
进入CMake官网,点击右侧download
跳转后,下拉页面找到最新版本,然后找下面二进制可执行文件(不要下成源程序文件了),因为我们电脑的环境Win10是WIindows的64位操作系统,所以在前两个中选一个下载,一般是先下安装包(第一个),如果安装包下载失败或者安装失败,才选择直接下压缩文件(第二个)。
下载完成后,按照提示安装/解压即可,详细安装过程可参照blog
注意:
跳转后选择最新的opencv3.x.x,作者下载的是3.4.14
版本,点击Windows
跳转到sourceforge后,和下载mingw-w64一样,先有5s倒计时,倒计时结束后自动开始下载(需要挂梯子)
如果没有自动开始下载,可以尝试点击Problems Downloading
(如下图)
然后在弹出来的镜像源中选择 中国台北 的National Center for High-Performance Computing
,网页自动刷新后即会开始下载。
下载完成之后点开opencv-3.4.14-vc14_vc15.exe
解压,解压之后进入如下目录新建一个文件夹MinGW
用来存放待会用mingw-w64
编译opencv
产生的的文件(下面的vc14和vc15是用x64架构下别的版本的编译器(MSVC)编译出的库文件)
接下来要用CMake
辅助编译,找到cmake-gui.exe
打开,填入自己源程序
和刚创建的MinGW文件夹
的绝对地址,点击Configure。
弹出选项框,选择Specify native compilers
,点击下拉箭头找到MinGW Makefiles
,点Next
分别填入你电脑上mingw-w64
文件夹中gcc.exe
和g++.exe
的地址,点Finish
等右侧进度条走完后,配置选项框里会出现一系列name:value
键值对,我们需要找到ENABLE_CXX11
并勾选,其余选项默认即可,点击Generate,等待进度条读完。
打开cmd,cd到MinGW目录下,输入minGW32-make -j 8
开始编译。-j
为可选参数,-j 8
为8线程编译,前提是电脑为8核处理器,根据自己配置可选择-j 4
或者不加(即默认单核编译)。编译进度到100%后,在cmd输入minGW32-make install
创建installl文件夹完成装载,完成后,可以在刚新建的MinGW
文件夹下面找到install
文件夹,里面即是待会要用到的所有的链接库,为了能找到这些链接库,我们需要将.../MinGW/install/x64/mingw/bin
添加到系统的环境变量中。
为了让VSCode能够找到我们刚刚编译出的opencv的库文件,我们需要在原有的基础上对配置文件(task.json
, launch.json
, c_cpp_properties.json
)做出一定的调整。在对VSCode官方文档进行学习之后,我们已经了解了这3个配置文件各自的作用,显然在debug的时候并不会用到新增的库文件,所以 launch.json
不用修改,但是我们需要在编译和 智能感知 环节,让VSCode找到我们的库函数,所以需要分别修改task.json
中传入参数args
部分和c_cpp_properties.json
中includePath
部分,我将修改后的两个文件整个附在了下面,请读者着重关注上述的两个部分中关于opencv的改动。
task.json
如下:
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe build active file",
"command": "D:/mingw-w64/x86_64-8.1.0-posix-sjlj-rt_v6-rev0/mingw64/bin/g++.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"-I",
"D:/opencv/build/x64/MinGW/install/include",
"-I",
"D:/opencv/build/x64/MinGW/install/include/opencv",
"-I",
"D:/opencv/build/x64/MinGW/install/include/opencv2",
"-L",
"D:/opencv/build/x64/MinGW/install/x64/MinGW/bin/lib*"
],
"options": {
"cwd": "D:/mingw-w64/x86_64-8.1.0-posix-sjlj-rt_v6-rev0/mingw64/bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "compiler: D:/mingw-w64/x86_64-8.1.0-posix-sjlj-rt_v6-rev0/mingw64/bin/g++.exe"
}
]
}
c_cpp_properties.json
:如下
{
"configurations": [
{
"name": "GCC",
"includePath": [
"${workspaceFolder}/**",
"D:/opencv/build/x64/MinGW/install/include",
"D:/opencv/build/x64/MinGW/install/include/opencv",
"D:/opencv/build/x64/MinGW/install/include/opencv2"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.17763.0",
"compilerPath": "D:/mingw-w64/x86_64-8.1.0-posix-sjlj-rt_v6-rev0/mingw64/bin/g++.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "windows-gcc-x64",
"compilerArgs": [],
"browse": {
"path": [
"${workspaceFolder}/**"
],
"limitSymbolsToIncludedHeaders": true
}
}
],
"version": 4
}
读者可以利用以下代码段,测试一下opencv是否能正常使用(读取图片并显示)
#include
#include
using namespace cv;
int main()
{
Mat img=imread("...xxx.jpg"); //填入你电脑中一张图片的绝对地址
cv::imshow("image",img);
cv::waitKey();
return 0;
}
将 VSCode 打造成 OpenCV 的 IDE(C++,window10 1803)
Windows下 VS Code搭建C++和opencv开发环境
opencv C++ Windows10 VSCode配置环境
Win10+VSCode搭建opencv+C++环境(1)
Win10+VSCode搭建opencv+C++环境(2)