Ubuntu20.04,在Vscode下配置C/C++和Opencv
Opencv的安裝
1.准備工作
ubuntu20.04
cmake>=3.10.2
unzip
mlocate包
更新包
sudo apt update
sudo apt upgrade
簡單安裝cmake
sudo apt install cmake
此安裝方式安裝的cmake可能不是最新的
查看cmake版本
cmake -version
安裝mlocate
sudo apt-get install mlocate
2.編譯
安裝依賴
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
配置cmake並編譯OpenCV
cd ~/opencv
mkdir build
cd build
Cmake編譯命令
-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報錯信息
3.安裝
編譯成功后
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
4. vscode的配置
下載和安裝vscode
略
注意下載C/C++插件
vscode環境配置
創建一個文件夾,作為我們的工作文件夾,之后的opencv代碼需要在此文件夾中運行
launch.json
這個文件主要是配置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
一般情況下,在上一步運行失敗之后,會直接提示你設置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 編譯環境配置
配置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"
},
這個要根據你們彈出的錯誤去看
然后發現成功運行!
