Ubuntu16.04 下编译安装Opencv,并在VSCode上配置C++调用程序
1前提:
Ubuntu16.04系统
VSCode编辑器(如何安装配置C++请移步我的另一篇博客)
Opencv源码(官网下载)
安装依赖库
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install cmake
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev libopencv-dev
2编译安装Opencv4:
我的源码是下载后解压到用户的Home目录下的,具体来讲就是 /home/haku/opencv-4.0.0 这样子。
cd /home/haku/opencv-4.0.0
mkdir release
cd release
然后设置cmake编译参数,这里我选择的是默认方式:
sudo cmake ..
然后开始编译:
sudo make
然后就开始编译了,这里需要的时间比较长,请耐心等待,然后我的没有报错,全部完美编译(网上有些人说会报错,但不影响后续的安装使用,所以原则上别动它,让它编译完再说)
等它编译完就开始安装
sudo make install
安装结束后,接着配置VSCode来使用它。
3.配置VScode相关参数:
主要就是工作空间目录下的 c_cpp_properties.json 、 launch.json 、 settings.json 、 tasks.json这四个配置文件,这四个文件在C++程序的工作空间的.vscode目录下都可以自动生成的。具体接着看。
launch.json和task.json主要是配置C++编译调试的,也就是Debug,这在之前的博客讲过,这些文件生成之后,都会一直存在的,这里还需要改动一下,将Opencv的环境参数添加进去,具体如下:
launch.json
{
// 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}.out",
"args": [],
"stopAtEntry": false,
"MIMode": "gdb",
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "build"
}
]
}
tasks.json
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "g++",
"args": [
"-g","${workspaceFolder}/${fileBasenameNoExtension}.cpp","-o","${fileBasenameNoExtension}.out",
"-I","/usr/include",
"-I","/usr/include/opencv",
"-I","/usr/include/opencv2",
"-L","/usr/local/lib/lib*"
],
"problemMatcher":{
"owner": "cpp",
"fileLocation":["relative","${workspaceFolder}"],
"pattern":{
"regexp": "^([^\\\\s].*)\\\\((\\\\d+,\\\\d+)\\\\):\\\\s*(.*)$",
"file": 1,
"line":2,
"column":3,
"severity": 4,
"location": 2,
"message": 5
}
},
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
c_cpp_properties.json文件之前没有说,这里需要改动了,先Ctrl+Shift+P可以调出控制窗口,再输入edit或者configuration,选择"C/Cpp:Edit Configurations":然后这个文件就出来了,修改如下:
c_cpp_properties.json:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/include",
"/usr/local/include/opencv4"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
最后还得修改一下工作空间的settings.json文件,因为这个文件里设置了各种各样的程序如何运行的一些东西,我们可以搜索"code-runner.executorMap",打开这个文件,也是编辑文件的这一部分,这里说不清楚,你打开就看到了,我截张图给大家看下:
就是这样的,这个文件左边是受保护的只读文件,我们只需要修改右半边的工作空间设置就了OK了,具体如下
settings.json
{
"code-runner.executorMap": {
"javascript": "node",
"java": "cd $dir && javac $fileName && java $fileNameWithoutExt",
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt `pkg-config opencv --libs --cflags opencv` && $dir$fileNameWithoutExt",
"objective-c": "cd $dir && gcc -framework Cocoa $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"php": "php",
"python": "python -u",
"perl": "perl",
"perl6": "perl6",
"ruby": "ruby",
"go": "go run",
"lua": "lua",
"groovy": "groovy",
"powershell": "powershell -ExecutionPolicy ByPass -File",
"bat": "cmd /c",
"shellscript": "bash",
"fsharp": "fsi",
"csharp": "scriptcs",
"vbscript": "cscript //Nologo",
"typescript": "ts-node",
"coffeescript": "coffee",
"scala": "scala",
"swift": "swift",
"julia": "julia",
"crystal": "crystal",
"ocaml": "ocaml",
"r": "Rscript",
"applescript": "osascript",
"clojure": "lein exec",
"haxe": "haxe --cwd $dirWithoutTrailingSlash --run $fileNameWithoutExt",
"rust": "cd $dir && rustc $fileName && $dir$fileNameWithoutExt",
"racket": "racket",
"ahk": "autohotkey",
"autoit": "autoit3",
"dart": "dart",
"pascal": "cd $dir && fpc $fileName && $dir$fileNameWithoutExt",
"d": "cd $dir && dmd $fileName && $dir$fileNameWithoutExt",
"haskell": "runhaskell",
"nim": "nim compile --verbosity:0 --hints:off --run",
"lisp": "sbcl --script"
}
}
其实基本没动,就是修改了一点CPP部分,具体为什么要修改呢,因为我们安装好Opencv后,没有配置环境变量,具体如何配置我在网上找了很多,都没有效果,所以我们就给CPP部分添加 `pkg-config opencv --libs --cflags opencv` 这个东西,这个东西好像是引导g++调用opencv的,很关键,没有它程序会报错。
这四个文件配置好之后呢,在终端执行下下面的命令
apt install apt-file
apt-file update
apt-file search opencv.pc
就是找opencv.pc这个文件,如果你前面正确安装了opencv,肯定是能找到的。找到后,执行下面命令
pkg-config --cflags opencv
结果显示 -I opencv opencv2 这就说明环境配置成功了。 我们前面的4个文件也是参照这里的环境配置的!
4.案例:
成功运行!
参考博客:
opencv安装参考:https://blog.csdn.net/luanpeng825485697/article/details/81181825
4个配置文件参考:https://www.cnblogs.com/YiYA-blog/p/10082635.html
https://blog.csdn.net/fdd096030079/article/details/82898489
最后的环境配置参考:https://blog.csdn.net/xiaoxiaodengzi/article/details/80312474