前言
vscode因界面美观性,强大的兼容性,以及轻量化设计广受程序员青睐,今天老杨主要谈一下如何使用vscode配置opencv,从而开启计算机视觉学习之路。老杨在配置的过程中也参考了很多博主的博客,发现大部分是针对linux进行配置的,对于windows下的配置讲解十分少。在vscode的json文件配置时,因为执行文件格式以及各部分参数不清晰,导致经常会出现很多意想不到的问题。我会在这篇文章中对于需要注意的地方进行标注,如果大家在follow配置的过程中出现任何问题,欢迎留言讨论!
配置组件
在开始配置一个基于vscode的opencv工程时,我们要准备好以下几个组件,这样能够帮助我们更快,更清晰地完成这样一个工程的配置,对应链接已附,方便读者查找下载。这部分内容不做赘述,网上对应的讲解也有很多了,读者可以自行查找安装。这里只强调一点,在安装MinGW 64时候,我们需要按照我这里的选项进行安装,不然后面opencv编不过去,会fatal error后中止。组件记得添加环境变量。
推荐的安装顺序是,先安装vscode,然后从vscode的组件中安装c/c++以及配置MinGW,这里确保一般的C++程序能够正常运行即可。所有路径中不可包含中文字符!!
- vscode及c++组件:vscode download link.
- CMake GUI:CMake download link.
- MinGW 64:MinGW 64 for Windows.
- OpenCV 任意版本 OpenCV release page.
MinGW 64安装配置方案
这里强调一定要选择posix,不然opencv编不过去,也没法install
CMake GUI
把路径和文件选对,如果执行时中断,则存在问题。configure之前,可以勾选BUILD_opencv_world,WITH_OPENGL和BUILD_EXAMPLES,不勾选WITH_IPP、WITH_MSMF和ENABLE_PRECOMPILED_HEADERS。勾选world主要是为了方便后续添加库,也可以不勾选。然后是熟悉的configure,generate,两个done后就可以了。如果后续编译出现问题,就返回来重新勾选Name中的选项,再次configure,generate,生成新的makefile,重新编译。CUDA相关的,看个人需求,一般可以不加。
这里要注意一点,在CMake时候会有文件无法下载,比如ffmpeg。因为数据源在外部,下载时候会产生无法连接服务器的超时error。这个时候可以仔细阅读CMakeDownloadLog.txt这个文件,所有下载失败的内容都会被记录在这里。里面有你对应的下载网址,以及你需要把他们放在自己电脑的哪个文件夹的指示,一定要耐心仔细阅读并下载,放置。在opencv的.cache文件夹里有三个下载失败的文件 0KB,但是他们的文件名是对的。如果你看不懂log的txt,你可以使用log给的对应链接下载完整文件,并直接使用下载失败的文件名进行重命名替换,仍放置在.cache文件夹目录下。注意每个版本的md5名字不同,都已经在CMakeDownloadLog.txt这个文件中,千万不可直接从网上复制粘贴进行重命名。
编完opencv通过后,打开windows的terminal,cd到makefile的文件夹下,使用minGW32-make进行编译,或者minGW32-make -j 4,采用多线程编译。4只是个例子,视自己电脑cpu配置情况而定。编译后minGW32-make install 即可。到此opencv已经装好了,剩下只是配置vscode,将opencv编好的库和头文件添加,就可以操作起来了。
vscode文件配置
vscode的配置主要就是这三个文件,在.vscode文件夹下,建立三个json文件对工程进行配置,分别是launch, c_cpp_properties, 和tasks。在这里我粘贴了我本机上测试运行正常的json文件,仅供大家参考。每个文件在不同的计算机上需要进行一些修改,我会对需要修改的内容进行说明。
launch.json
launch文件必须修改的只有一个参数:
- miDebuggerPath 修改成你自己电脑MinGW的对应路径,能找到你的gdb.exe就行。
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/gdb.exe",
"preLaunchTask": "g++",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
]
}
c_cpp_properties.json
这个文件修改的内容有两个
- includePath:修改成你电脑上的opencv对应文件夹路径。注意有些文件夹下没有opencv这个文件,只有opencv2,那就只添加这个,不要盲目复制粘贴。
- compilerPath:找到你的MinGW下的gcc.exe文件并复制绝对路径。
其他内容无需更改。
{
"configurations": [
{
"name": "win",
"includePath": [
"${workspaceFolder}/**",
"E:/opencv/build/include",
"E:/opencv/build/include/opencv2"
],
"defines": [],
"compilerPath": "C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/gcc.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
tasks.json
这部分修改内容较多,也是最后一部分需要修改的内容,请务必耐心看完:
- command:修改为你自己电脑上的g++路径
- args 修改路径,改为你自己电脑的opencv文件目录
- 注意库文件名后的“410”是我安装的版本为4.1.0,需要修改为你自己安装的版本
其他内容无需修改
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "g++",
"type": "shell",
"command": "C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/g++",
"args": [
"-g",
"${file}",
"-o",
"${workspaceFolder}\\${fileBasenameNoExtension}.exe",
"-I", "E:\\opencv\\build\\include",
"-I", "E:\\opencv\\build\\include\\opencv2",
"-L", "E:\\opencv\\build\\x64\\MinGW\\lib",
"-l", "opencv_core410",
"-l", "opencv_imgproc410",
"-l", "opencv_imgcodecs410",
"-l", "opencv_video410",
"-l", "opencv_ml410",
"-l", "opencv_highgui410",
"-l", "opencv_objdetect410",
"-l", "opencv_flann410",
"-l", "opencv_imgcodecs410",
"-l", "opencv_photo410",
"-l", "opencv_videoio410"
],
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
]
}
结束语
到此,所有关于vscode和opencv的配置就结束了。可以编写一个简单的程序进行测试:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main() {
VideoCapture cap(0);
while (1){
Mat cam;
cap >> cam;
imshow("camera",cam);
waitKey(30);//延时30秒
}
return 0;
}
如果摄像头正常打开,并开始显示拍摄内容,那么opencv就算基本安装成功了!大家也可以调用一些opencv自带的sample去进行测试,需要注意的是,这里仅仅编译了opencv的核心库,并没有联合opencv contrib的库一起进行编译。有需要的读者可以自行进行查阅资料尝试,老杨后续也可能更新关于联合opencv 及opencv contrib进行编译和配置的博文。