Deepin 20.8:安装OpenCV4,配置vscode+CMake作为基本开发环境
Excerpt
文章目录一、在Deepin上安装OpenCV1、安装基本工具2、安装OpenCV 依赖的库3、下载OpenCV源代码4、配置和编译OpenCV5、环境配置5.1、配置pkg-config环境5.2、配置动态库环境6、测试opencv6.1、测试方式一6.2、测试方式二7、卸载OpenCV4(通过源码编译安装)二、编写CMakeLists.txt三、安装VS Code四、配置VS Code五、Reference Link提示:以下是本篇文章正文内容,使用的硬件环境如下操作系统:Ubuntu 20.0.
文章目录
提示:以下是本篇文章正文内容,使用的硬件环境如下
一、在Deepin上安装OpenCV
1、安装基本工具
确保Ubuntu上有安装过程中使用到的一些工具,如果没有,请输入以下指令安装:
sudo apt install -y g++
sudo apt install -y cmake
sudo apt install -y make
sudo apt install -y wget unzip
输入 -v / --version 查看版本信息:
gcc/g++:gcc version 8.3.0 (Deepin 9.3.0-17ubuntu1~20.04)
make:GNU Make 4.2.1
cmake:cmake version 3.22.1
2、安装OpenCV 依赖的库
输入以下指令安装OpenCV依赖的基本库
sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
支持python3:此步为可选,不设置也可以(亲测可行),如果设置了,在下一步cmake中下载ippicv可能会很慢
# python3支持
sudo apt install python3-dev python3-numpy
# streamer支持
sudo apt install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
# 可选的依赖
sudo apt install libpng-dev libopenexr-dev libtiff-dev libwebp-dev
3、下载OpenCV源代码
安装4.7.0版本:
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.7.0.zip
或安装最新版本:
wget -O opencv.zip https://github.com/opencv/opencv/archive/master.zip
其他版本可从opencv官网下载
下载完后解压缩并重命名为opencv(源码包大小大概90M):
unzip opencv.zip
mv opencv-master opencv
4、配置和编译OpenCV
1)进入到下载好的opencv目录中,新建目录build并进入build目录:
cd opencv
mkdir build
cd build
2)使用cmake配置opencv
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES ..
命令说明:
-D OPENCV_GENERATE_PKGCONFIG=YES OpenCV4以上默认不使用pkg-config,该编译选项开启生成opencv4.pc文件
3)使用make编译
make -j8
说明:-j4中的4指同时使用4个进程,可以根据电脑的进程数调整此值
4)使用make安装
sudo make install
默认安装路径为:
/usr/local/bin - executable files
/usr/local/lib - libraries (.so)
/usr/local/cmake/opencv4 - cmake package
/usr/local/include/opencv4 - headers
/usr/local/share/opencv4 - other files (e.g. trained cascades in XML format)
5、环境配置
5.1、配置pkg-config环境
opencv4.pc文件的默认路径为/usr/local/lib/pkgconfig/opencv4.pc,如果此目录下没有,可以使用以下命令搜索:
find / -iname opencv4.pc
将路径加入到PKG_CONFIG_PATH:
sudo gedit /etc/profile.d/pkgconfig.sh
在文件后面加入下面一行:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
保存并退出后激活:
source /etc/profile
验证是否成功:
pkg-config --libs opencv4
-L/usr/local/lib -lopencv_dnn -lopencv_highgui -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_video -lopencv_calib3d -lopencv_features2d -lopencv_flann -lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core
5.2、配置动态库环境
打开文件(可能为空文件):
sudo gedit /etc/ld.so.conf.d/opencv4.conf
在该文件末尾加上OpenCV的lib路径:
/usr/local/lib
使配置的路径生效:
sudo ldconfig
6、测试opencv
6.1、测试方式一
cd 到/opencv/samples/cpp/example_cmake目录下,依次执行以下命令:
cmake .
make
./opencv_example
该测试需要电脑有摄像头,如果启动摄像头看到了画面,说明安装成功。
6.2、测试方式二
在终端输入指令 pkg-config --modversion opencv4 即可看到OpenCV版本信息输出、
7、卸载OpenCV4(通过源码编译安装)
1)找到源码路径,在终端中进入到build目录,依次执行:
sudo make uninstall
cd ..
sudo rm -r build
2)在/usr/local下搜索opencv4
sudo find ./ -name opencv4*
将找到的opencv相关项删除即可,大概删除以下项:
sudo rm -r /usr/local/include/opencv4
sudo rm -r /usr/local/lib/pkgconfig/opencv4.pc
sudo rm -r /usr/local/lib/cmake/opencv4
sudo rm -r /usr/local/share/licenses/opencv4
sudo rm -r /usr/local/share/opencv4
二、编写CMakeLists.txt
在Deepin下,我们经常使用编写Cmake的方式来编译CV项目,CMakeLists.txt的语法比较简单,网上也有很多例子。
一个简单的参考示例如下:
# Time: 12:03 2022.12.22
# Author: xxx
# This is a file - "CMakeLists.txt" for OpenCV Project
cmake_minimum_required ( VERSION 3.15 )
set(PROJECT_NAME Lambda)
set(SRC Lambda.cpp)
project(${PROJECT_NAME})
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
link_directories(${OpenCV_LIB_DIRS})
add_executable(${PROJECT_NAME} ${SRC})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
将CMakeLists.txt放置在源文件同级目录下,并执行以下指令
# 不一定要创建build文件夹,但是为了简洁,还是创建比较好
mkdir build
cd build
cmake ..
make
# 这里是你的可执行性文件名的名字
./Lambda
效果截图:
PS:没有图像是因为笔者没有打开摄像头,通过点击虚拟机右下方的摄像头图标,将本机前置摄像头重定向到虚拟中,即可展现图像
三、安装VS Code
要在Deepin系统上安装Visual Studio Code,请按照以下步骤操作:
首先,更新软件包索引并通过键入以下内容安装依赖项:
sudo apt update
sudo apt install software-properties-common apt-transport-https wget
使用以下 wget命令导入Microsoft GPG密钥:
wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -
并通过键入以下内容启用Visual Studio代码存储库:
sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"
一旦启用 apt储存库,请使用以下方式安装最新版本的Visual Studio Code:
sudo apt update
sudo apt install code
现在,在你的Ubuntu系统上安装了VS Code,您可以通过在命令行中输入code或单击VS Code图标(Activities -> Visual Studio Code)来启动它。
四、配置VS Code
除了一些VScode通用配置之外,可以在VS code安装CMake Toos,在下方的build可以编译工程文件,点击竖三角可以运行运行程序,这样可以避免在终端中输入指令这种繁琐的方式运行程度,具体可以参考链接(亲测可行):
c_cpp_properties.json
界面上方中心会显示一个下拉菜单,显示三个选项:
WIN32
编辑配置(UI)
编辑配置(JSON)<----
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/local/include/",
"/usr/local/include/opencv4/",
"/usr/local/include/opencv4/opencv2/"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++14",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
launch.json
选择左侧任务栏的第四个选项运行和调试,点击创建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": "g++ - 生成和调试活动文件",
"preLaunchTask": "build c program",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
}
]
}
tasks.json
终端—>配置任务—>创建tasks.json
{
"version": "2.0.0",
"tasks": [
{
"type": "shell", /* 定义任务是被作为进程运行还是在 shell 中作为命令运行,默认是shell,即是在终端中运行,因为终端执行的就是shell的脚本 */
"label": "build c program", /* 要与launch.json文件里的preLaunchTask的内容保持一致 */
"command": "/usr/bin/g++", /* 这里填写你的编译器地址 */
"args": [
/* 类似与qt的Pro文件里开始的那几句 */
"-std=c++11",// 静态链接
"-static-libgcc",
"-Wall",// 开启额外警告
/* 说明整个项目所需的头文件路径(.h)*/
"-I","${workspaceFolder}/",
"-I","/usr/local/include/",
"-I","/usr/local/include/opencv4/",
"-I","/usr/local/include/opencv4/opencv2/",
/* 说明整个项目所需的源文件路径(.cpp) */
"-g",
"${fileDirname}/*.cpp",/* ${workspaceFolder}表示路径从当前项目文件夹开始 */
"-o", /* 编译输出文件的存放路径 */
"${fileDirname}/${fileBasenameNoExtension}", /* 要与launch.json文件里的program的内容保持一致 */
/* ${fileDirname} 是指 文件目录名 相当于${workspaceFolder}*/
/* ${fileBasenameNoExtension}意思是指 该路径下没有扩展名的文件基本名称没有扩展名 */
/* 也可以这样:"${workspaceFolder}/run.o", */
/* OpenCV的lib库 */
"/usr/local/lib/libopencv_*",
],
"options": {
"cwd": "${workspaceFolder}" /* 调试程序时的工作目录,一般为${workspaceFolder}即代码所在目录 */
},
"problemMatcher": [
"$gcc" /* 要使用的问题匹配程序。 */
],
"group": "build" /* 将任务标记为可通过 "运行生成任务" 命令访问的生成任务。*/
}
]
}
settings.json
打开vscode-文件-首选项-设置-扩展-Run Code configuration-找到code-runner:Executor.Map下在settings.json中编辑。
{
"workbench.colorTheme": "Jetbrains Fleet",
"glassit.alpha": 235,
"editor.fontFamily": "'Monaco'",
"editor.fontWeight": "bold",
"files.autoSave": "afterDelay",
"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 && $dir$fileNameWithoutExt",
"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt `pkg-config opencv --libs --cflags opencv` && $dir$fileNameWithoutExt",
//"cpp": "cd $dir && g++ -std=c++11 `pkg-config --cflags --libs opencv4` $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",
"scheme": "csi -script",
"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",
"kit": "kitc --run",
"v": "v run",
"sass": "sass --style expanded",
"scss": "scss --style expanded",
"less": "cd $dir && lessc $fileName $fileNameWithoutExt.css",
"FortranFreeForm": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"fortran-modern": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"fortran_fixed-form": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"fortran": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"sml": "cd $dir && sml $fileName"
},
"code-runner.executorMapByFileExtension": {
".vb": "cd $dir && vbc /nologo $fileName && $dir$fileNameWithoutExt",
".vbs": "cscript //Nologo",
".scala": "scala",
".jl": "julia",
".cr": "crystal",
".ml": "ocaml",
".exs": "elixir",
".hx": "haxe --cwd $dirWithoutTrailingSlash --run $fileNameWithoutExt",
".rkt": "racket",
".scm": "csi -script",
".ahk": "autohotkey",
".au3": "autoit3",
".kt": "cd $dir && kotlinc $fileName -include-runtime -d $fileNameWithoutExt.jar && java -jar $fileNameWithoutExt.jar",
".kts": "kotlinc -script",
".dart": "dart",
".pas": "cd $dir && fpc $fileName && $dir$fileNameWithoutExt",
".pp": "cd $dir && fpc $fileName && $dir$fileNameWithoutExt",
".d": "cd $dir && dmd $fileName && $dir$fileNameWithoutExt",
".hs": "runhaskell",
".nim": "nim compile --verbosity:0 --hints:off --run",
".csproj": "dotnet run --project",
".fsproj": "dotnet run --project",
".lisp": "sbcl --script",
".kit": "kitc --run",
".v": "v run",
".vsh": "v run",
".sass": "sass --style expanded",
".cu": "cd $dir && nvcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
".ring": "ring",
".sml": "cd $dir && sml $fileName"
},
"editor.fontVariations": false,
"editor.fontLigatures": false
}
五、QT 配置
INCLUDEPATH += /usr/local/includel\
/usr/local/include/opencv4\
/usr/local/include/opencv4/opencv2
LIBS += /usr/local/lib/libopencv_highgui.so \
/usr/local/lib/libopencv_highgui.so.4.7.0 \
/usr/local/lib/libopencv_core.so\
/usr/local/lib/libopencv_imgproc.so \
/usr/local/lib/libopencv_imgcodecs.so