ubuntu16.04+VS Code+OpenCV配置编译运行程序
博主自述:大概也是在去年的这时候,博主入坑OpenCv,当时在Windows环境下使用Visual Studio配置OpenCV可谓艰难险阻,碰到不少坑,之后由于电脑重装系统频繁,重新配置多次OpenCV,于是打算写一篇博客记录一下配置的历程。时隔一年,又入ubuntu系统的坑,现在由于Linux系统配置编译OpenCV较为生疏,且与Windows操作系统大为不同,每次也不必花大量时间找别人的所谓配置博客去试水,所以记录一下心路历程。现在大多写博客或者出书的都是给懂的人看的,所以那么接下来会一步一步带上一个小白在基于ubunntu操作系统下,使用VS Code正确配置编译运行OpenCV。
大致会按如下步骤安装:
1、安装IDE(VS Code)
2、安装OpenCV
3、配置编译文件
(注):本文所有的软件都是去官网下载源码,关于IDE可以去商店安装或者直接使用命令安装都可以。
那么请看第一步:
安装VS Code,众所周知。VS Code只是一个IDE,属于轻量级IDE功能强大,插件也很多,十分推荐这款IDE,本文也以VS Code为教学对象。
1、安装IDE(VS Code)
安装步骤如下:
1)去当前VS Code官网直接下载源码:https://code.visualstudio.com/Download,根据电脑的位数下载.deb格式文件至本地下载文件如下图所示。点击即可下载。
2)下载完之后,下载文件一般在Downloads文件中,右键Extract Here提取文件或者使用命令行在当前目录路径下输入:
tar -zxvf code-stable-xxxxxxxxx.tar.gz (你的解压缩文件名)
3)这时当前目录下出现文件 VSCode-linux-x64(VSCode-linux-x32),进入该文件,右键 -----> run。(或者使用命令行
minglou@minglou:~/Downloads$ cd VSCode-linux-x64/
minglou@minglou:~/Downloads/VSCode-linux-x64$ ./code
允许该文件,打开正常,则没问题,那么接下来就去安装OpenCV吧!!
2、安装OpenCV
1)OpenCV依赖库的安装
2)OpenCV源码下载
3)OpenCV编译
安装OpenCV需要安装很多的依赖库,这时候可以边安装依赖库,一边下载OpenCV源码。
1)依赖库安装:
$ sudo apt-get install build-essential
$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev # 处理图像所需的包
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
$ sudo apt-get install libxvidcore-dev libx264-dev # 处理视频所需的包
$ sudo apt-get install libatlas-base-dev gfortran # 优化opencv功能
$ sudo apt-get install ffmpeg
2)OpenCV源码下载:
这里需要下载opencv和opencv_contrib(后者会在cmake配置的时候用到),这是因为opencv3以后SIFT和SURF之类的属性被移到了contrib中,如果不用到以上特殊接口,只需下载opencv,以下关于opencv_contrib的操作可以忽略。
$ wget https://github.com/opencv/opencv/archive/3.2.0.zip # 从github上直接下载或者clone也可
$ wget https://github.com/opencv/opencv_contrib/archive/3.2.0.zip
3)OpenCV编译:
下载成功后在Downloads目录下会有两个对于的文件压缩包,(由于文件命名相同问题,自行分辨哪个是opencv,哪个是contrib版本)解压之后,将opencv_contrib目录移到opencv目录下。
之后:
$ cd opencv-3.2.0
$ mkdir build #创建build文件夹用于编译保存
$ cd build
如果没有下载contrib:
$ sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
如果下载安装contrib版本:
$ sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ..
编译之后执行以下过程实现安装:
$ sudo make -j4 #make -j4表示开4个线程来进行编译
$ sudo make install
下面体验以下正常编译OpenCV文件并允许,以此检查OpenCV是否可以正常编译运行:
minglou@minglou:~/Downloads/opencv-3.2.0/samples/cpp/example_cmake$ g++ example.cpp -o 1 `pkg-config opencv --cflags --libs opencv`
minglou@minglou:~/Downloads/opencv-3.2.0/samples/cpp/example_cmake$ ./1
如果看到屏幕有一张图片一闪而过即代表安装成功。
最后显示如下代表正常安装完毕。如果中途出现安装或者编译出错,百度即可。
3、配置编译文件(VS Code + OpenCV)
打开VS Code
minglou@minglou:~/Downloads$ cd VSCode-linux-x64/
minglou@minglou:~/Downloads/VSCode-linux-x64$ ./code
打开运行VS Code
只需更改以下三个文件:
launch.json, task.json, c_cpp_properties.json
1.安装c++, cmake tools等插件
通过左边栏的Extension栏目安装C++, cmake tools插件
点击install即可。
2.创建项目工程
VScode是以文件夹的形式管理工程的,因此我们首先新建一个文件夹,我这里取名叫hello。
配置opencv需要编写CMakeLists.txt,为了方便可以直接打开OpenCV官方给出的samples,博主路径如下:/home/minglou/Downloads/opencv-3.2.0/samples/cpp
然后通过VScode打开此文件夹目录下的videocapture_start.cpp文件。
3.项目配置
3.1 输入快捷键ctrl+shift+D, 点击设置图标,弹出的选择中选C++(GDB/LLDB),会自动创建项目的launch.json文件。然后更改launch.json中的配置,主要是修改program字段,改为可执行文件所在位置。如:
"program": "${workspaceRoot}/${fileBasenameNoExtension}.o" //则源文件为aaa.c执行文件为aaa.o
launch.json
1 { 2 // Use IntelliSense to learn about possible attributes. 3 // Hover to view descriptions of existing attributes. 4 // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 "version": "0.2.0", 6 "configurations": [ 7 { 8 "name": "g++ build and debug active file", 9 "type": "cppdbg", 10 "request": "launch", 11 "program": "${fileDirname}/${fileBasenameNoExtension}.o", 12 "args": [], 13 "stopAtEntry": false, 14 "cwd": "${workspaceFolder}", 15 "environment": [], 16 "externalConsole": false, 17 "MIMode": "gdb", 18 "setupCommands": [ 19 { 20 "description": "Enable pretty-printing for gdb", 21 "text": "-enable-pretty-printing", 22 "ignoreFailures": true 23 } 24 ], 25 "preLaunchTask": "g++ build active file", 26 "miDebuggerPath": "/usr/bin/gdb" 27 } 28 ] 29 }
主要关注三个参数:
"program"
这一参数指明debug时运行哪个程序,"program": "${workspaceFolder}/${fileBasenameNoExtension}.o",表明是要运行当前目录中与被编译文件同名的.o后缀文件
"MIMode"
这一参数指明要使用的debug工具,Ubuntu环境下当然是gdb。win10环境下是MinGW,MacOS环境下是lldb。
"miDebuggerPath"
这一句也很重要。在默认生成的launch.json文件中并没有这一参数的设置语句,但这一句却是最重要的,因为有了这一句,vscode在编译运行cpp文件时才能找到gdb程序。
一般情况下,gdb是被安装在/usr/bin/gdb目录下,所以这一句为:"miDebuggerPath": "/usr/bin/gdb",
此时可以运行main.cpp文件
3.2 快捷键ctrl+shift+P调出命令面板,并输入C/C++:Edit Configuration(JSON),编辑文件"includePath"选项,加入OpenCV的头文件,通常是"/usr/local/include",如下图所示(别忘记前面家逗号(,),后面不加逗号(,))
在自己的cpp文件里直接包含opencv库,聪明的cpp扩展会给你一个小提示提醒你打开c_cpp_properties.json设置头文件包含。不说废话:
c_cpp_properties.json
{ "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**", "/usr/local/include" ], "defines": [], "compilerPath": "/usr/bin/gcc", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "clang-x64" } ], "version": 4 }
3.3 快捷键ctrl+shift+P调出命令面板,并输入Tasks:Configure Task,默认选择第一项,开始编辑task.json文件,重点在这
1 "args": [ 2 "-g", 3 "-std=c++11", 4 "${file}", 5 "-o", 6 ],
明眼人一看就知道这就是g++编译命令,不必多说。要注意最后一个参数"${fileBasenameNoExtension}.o",,必须跟launch.json中program参数("${workspaceFolder}/${fileBasenameNoExtension}.o")的文件名相对应。
还有一点就是,如果要设置label参数的话,要将之设置为preLaunchTask的值。不记得preLaunchTask的童鞋回头看看launch.json。
这部分通用的C++编译运行设置就OK了,现在你可以愉快地用vscode写hello world了,但是我们的征程是星辰大海和opnencv,所以,还得继续折腾。
解决OpenCV库文件搜索,直接修改编译命令,也就是tasks.json中的args参数:
tasks.json
1 { 2 "tasks": [ 3 4 { 5 "type": "shell", 6 "label": "g++ build active file", 7 "command": "g++", 8 "args": [ 9 "-g", 10 "-std=c++11", 11 "${file}", 12 "-o", 13 "${fileDirname}/${fileBasenameNoExtension}.o", 14 "-I", "/usr/local/include", 15 "-I", "/usr/local/include/opencv", 16 "-I", "/usr/local/include/opencv2", 17 "-L", "/usr/local/lib", 18 "-l", "opencv_core", 19 "-l", "opencv_imgproc", 20 "-l", "opencv_imgcodecs", 21 "-l", "opencv_video", 22 "-l", "opencv_ml", 23 "-l", "opencv_highgui", 24 "-l", "opencv_objdetect", 25 "-l", "opencv_flann", 26 "-l", "opencv_imgcodecs", 27 "-l", "opencv_photo", 28 "-l", "opencv_videoio" 29 ], 30 "options": { 31 "cwd": "/usr/bin" 32 }, 33 "group": { 34 "kind": "build", 35 "isDefault": true 36 } 37 } 38 ], 39 "version": "2.0.0" 40 }
其中-I表示头文件目录,-L表示库文件目录,-l表示库文件。
那么,以上OpenCV已经配置好了ctrl+shift+B编译cpp文件,F5运行。直接上手代码来一段吧。
推荐博客:https://www.cnblogs.com/YiYA-blog/p/10082635.html
https://blog.csdn.net/weixin_43374723/article/details/84064644