参考文章 Ubuntu 18.04系统下的环境配置vscode&&opencv&&c++
ubuntu20.04
cmake>=3.10.2
unzip
mlocate包
sudo apt update sudo apt upgrade
sudo apt install cmake
此安装方式安装的cmake可能不是最新的
查看cmake版本
cmake -version
sudo apt-get install mlocate
sudo apt install openssl libssl-dev mingetty zip unzip git curl vim gcc g++ -y sudo apt install socat zsh curl git vim make cmake -y sudo apt install autojump -y sudo apt-get install -y libtiff5-dev libeigen3-dev sudo apt install -y git gcc g++ make cmake libgtk2.0-dev libgoogle-glog-dev sudo apt install -y libtesseract-dev libgtkglext1 libgtkglext1-dev ffmpeg sudo apt install -y libv4l-0 libv4l-dev sudo apt install -y liblapacke-dev libopenblas-dev libgtk-3-dev libgstreamer-plugins-base1.0-dev sudo apt install -y libgstreamer1.0-dev libavresample-dev libgphoto2-dev libdc1394-22-dev sudo apt-get install -y build-essential make cmake cmake-curses-gui git g++ pkg-config curl sudo apt-get install -y libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libeigen3-dev libglew-dev libgtk2.0-dev sudo apt-get install -y libtbb2 libtbb-dev v4l-utils qv4l2 v4l2ucp sudo apt-get install -y libdc1394-22-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev sudo apt-get install -y libjpeg8-dev libjpeg-turbo8-dev libtiff-dev libpng-dev sudo apt-get install -y libxvidcore-dev libx264-dev libgtk-3-dev sudo apt-get install -y libatlas-base-dev libopenblas-dev liblapack-dev liblapacke-dev gfortran sudo apt-get install -y qt5-default sudo apt-get install -y python3-dev python3-testresources sudo apt-get install -y libcanberra-gtk-module
选择合适的opencv版本,contrib库版本需与opencv版本相同,以目前使用的3.4.7为例,下载zip压缩包
opencv3.4.7
OpenCV-Contrib
使用shell将压缩包下载到文件夹内,需要将[version_id]改为需要下载的版本号
cd ~ wget -O opencv.zip https://github.com/opencv/opencv/archive/[version_id].zip wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/[version_id].zip unzip opencv.zip unzip opencv_contrib.zip mv opencv-[version_id] opencv mv opencv_contrib-[version_id] opencv_contrib
比如我下载的是3.4.7版本,那么
cd ~ wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.7.zip wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.7.zip unzip opencv.zip unzip opencv_contrib.zip mv opencv-[version_id] opencv mv opencv_contrib-[version_id] opencv_contrib
cd ~/opencv mkdir build cd build
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
此处路径必须填写正确,否则编译测试通过后代码仍然可能编译报错,缺少xxx文件
cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D ENABLE_NEON=OFF \ -D ENABLE_FAST_MATH=ON \ -D WITH_GSTREAMER=ON \ -D WITH_LIBV4L=ON \ -D BUILD_opencv_python2=OFF \ -D BUILD_opencv_python3=ON \ -D BUILD_TESTS=OFF \ -D BUILD_PERF_TESTS=OFF \ -D BUILD_EXAMPLES=OFF \ -D WITH_TBB=ON \ -D BUILD_opencv_world=OFF \ -D BUILD_opencv_xfeatures2d=OFF \ -D WITH_OPENGL=ON \ -D WITH_GTK_2_X=ON \ -D OPENCV_ENABLE_NONFREE=ON \ -D EIGEN_INCLUDE_PATH="/usr/include/eigen3" \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ -D WITH_XINE=ON \ -D WITH_GDAL=ON \ ..
make -j8
此处8为最大支持线程数,一般为cpu数两倍,一般情况下为4核8线程,线程数过多时可能减低编译效率,设置导致编译报错。
make时如看到
$ make make: * No targets specified and no makefile found. Stop.
此时问题为Cmake出现问题,请查看Cmake报错信息
编译成功后
sudo make install sudo ldconfig
sudo vim /etc/bash.bashrc
在末尾添加,此处是vim编辑器,如果不会使用请百度“如何在vim末尾添加”“vim编辑器如何保存退出”
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
保存退出
source /etc/bash.bashrc sudo updatedb
配置生效
查看Linux opencv安装库
pkg-config opencv --libs
查看安装版本
pkg-config opencv --modversion
略
注意下载C/C++插件
创建一个文件夹,作为我们的工作文件夹,之后的opencv代码需要在此文件夹中运行
这个文件主要是配置debug,具体设置如下:
{ // 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}.o", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb", "preLaunchTask": "g++", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "miDebuggerArgs": "-q -ex quit; wait() { fg >/dev/null; }; /bin/gdb -q --interpreter=mi", }, ] }
一般情况下,在上一步运行失败之后,会直接提示你设置task.json文件,如果没有,你也可以点击Ctrl+Shift+P"调出命令面板,然后搜索Task,点击第一个
Tasks:Configure Default Build Task
会提示你依据模板创建task.json,这里不管什么模板,随便选一个,然后直接复制粘贴以下设置代码:
{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "command": "g++", "args": [ "-g", "-std=c++11", "${file}", "-o", "${fileBasenameNoExtension}.o",// 设置动态链接库 "-I", "/usr/local/include", "-I", "/usr/local/include/opencv", "-I", "/usr/local/include/opencv2", "-L", "/usr/local/lib", "-l", "opencv_core", "-l", "opencv_imgproc", "-l", "opencv_imgcodecs", "-l", "opencv_video", "-l", "opencv_ml", "-l", "opencv_highgui", "-l", "opencv_objdetect", "-l", "opencv_flann", "-l", "opencv_imgcodecs", "-l", "opencv_photo", "-l", "opencv_videoio" ],// 编译命令参数 "problemMatcher":{ "owner": "cpp", "fileLocation":[ "relative", "${workspaceFolder}" ], "pattern":[ { "regexp": "^([^\\\\s].*)\\\\((\\\\d+,\\\\d+)\\\\):\\\\s*(.*)$", "file": 1, "location": 2, "message": 3 } ] }, "group": { "kind": "build", "isDefault": true } }
里面有很多参数是适配opencv的
配置opencv,其实主要就解决两个问题,一个是头文件包含,一个是库文件搜索。头文件包含在c_cpp_properties.json中解决,库文件包含则要继续修改task.json中的编译命令。首先来看c_cpp_properties.json:
c_cpp_properties.json
怎么打开这个文件呢,两种方式,一个就是打开命令面板(还记得那个快捷键吗?我一直记,一直忘),然后搜索cpp: Edit,点击结果就可以进入这一文件。
另一种就是在自己的cpp文件里直接包含opencv库,聪明的cpp扩展会给你一个小提示提醒你打开c_cpp_properties.json设置头文件包含。
不说废话:
{ "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**", "/usr/local/include", //请确保你的opencv opencv2头文件夹安装在这个目录 "/usr/include" ], "defines": [], "compilerPath": "/usr/bin/gcc", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "clang-x64" } ], "version": 4 }
#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { Mat img = imread("xxxx"); //xxxx为图片路径,绝对路径 imshow("test", img); waitKey(0); return 0; }
随便找一张图片,放在某个路径然后替换imread
函数的参数
运行后,我弹出报错了
提示我 无法打开"raise.c":无法读取文件.........
需要安装glibc-source
在终端中输入
$ sudo apt install glibc-source
然后在launch.json中的"configurations"下添加
"sourceFileMap": { "/build/glibc-YYA7BZ": "/usr/src/glibc" }
其中"YYA7BZ"要改为报错信息中显示的glibc后缀
比如我的是
"sourceFileMap": { "/build/glibc-eX1tMB": "/usr/src/glibc" },
这个要根据你们弹出的错误去看
然后发现成功运行!