博主自述:大概也是在去年的这时候,博主入坑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格式文件至本地下载文件如下图所示。点击即可下载。

ubuntu vscode python环境 ubuntu vscode配置opencv_Code

 


    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

如果看到屏幕有一张图片一闪而过即代表安装成功。


最后显示如下代表正常安装完毕。如果中途出现安装或者编译出错,百度即可。

ubuntu vscode python环境 ubuntu vscode配置opencv_json_02

 

 


3、配置编译文件(VS Code + OpenCV)

    打开VS Code

minglou@minglou:~/Downloads$ cd VSCode-linux-x64/

minglou@minglou:~/Downloads/VSCode-linux-x64$ ./code

打开运行VS Code

ubuntu vscode python环境 ubuntu vscode配置opencv_json_03

 


    只需更改以下三个文件:

launch.json, task.json, c_cpp_properties.json


1.安装c++, cmake tools等插件

ubuntu vscode python环境 ubuntu vscode配置opencv_OpenCV_04

 


通过左边栏的Extension栏目安装C++, cmake tools插件

点击install即可。


2.创建项目工程


VScode是以文件夹的形式管理工程的,因此我们首先新建一个文件夹,我这里取名叫hello。


ubuntu vscode python环境 ubuntu vscode配置opencv_openCv_05

 

配置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运行。直接上手代码来一段吧。

明楼