Ubuntu22.04 下载并使用opencv全流程
前言
因为马上要开始准备考研,所以把opencv配置的流程重新做一遍留档,以防自己忘记
虚拟机的创建就不再赘述了,从一个已经配置完成的虚拟机开始
正文
前置配置
首先是配置各种东西之前的日常
sudo apt update
sudo apt upgrade
然后是各种编译文件的下载
sudo apt install g++
sudo apt install cmake
sudo apt install make
OPENCV下载与安装
opencv的下载
进入opencv官网OpenCV - Open Computer Vision Library
这个代码是在github上的,所以如果搞不定linux的魔法,也可以在win上下载好了传输过去,是没有影响的
解压
进入压缩包所在的文件夹使用unzip命令解压(如果没有,就先下载unzip)
下载部分依赖
sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev libopenexr-dev libtbb-dev
准备编译
我个人倾向于先在home下创建一个opencv文件夹,再把解压文件夹全部移过去,再在opencv文件夹下创建一个code文件夹用来放代码
在解压的文件夹下创建 build用来存放编译文件
进入build文件夹进行编译
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES ..
安装
sudo make install
这就算是完成了基本的下载和安装,随后是如何使用
opencv的使用
下载vscode
一直以来都比较喜欢vscode,所以用vscode,ubuntu下载vscode可以直接在应用商店下,也可以去官网下安装包安装,这方面不展开讲了,教程很多
注意,这里在应用商店直接下可能后面会有奇怪的报错,建议官网下载后安装
查看自己opencv的安装路径
这是我的路径,一般按照上面的方式安装的都在这个位置
同时最好是像我这样创建一个opencv2文件夹的在include下,以免编译器犯病找不到
具体方法是在include文件夹下,使用以下命令行
sudo ln -s opencv4/opencv2 opencv2
完成之后是这样子
使用VSCODE写OPENCV代码
先在home的opencv文件夹下创建一个code(其实不在这里创建也完全没有关系,但是我习惯这样)
再使用vscode打开此文件夹,code文件夹下创建.vscode文件夹,创建以下三个文件
// c_cpp_properties.json
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/local/include/opencv4", //请确保你的opencv opencv2头文件夹安装在这个目录
"/usr/local/include/opencv4/opencv2"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu17",
"cppStandard": "gnu++14",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
// launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - 生成和调试活动文件",
"type": "cppdbg", // 只能是cppdbg
"request": "launch", // launch:启动,attach:附加
"program": "${fileDirname}/${fileBasenameNoExtension}", // 需要调试的程序
"args": [], // 调试时传递给程序的参数
"stopAtEntry": false, // 调试时是否停在程序入口:{true:是,false:否}
"cwd": "${workspaceFolder}", // 工作目录
"environment": [], // 额外的环境变量
"externalConsole": false, // true:输出到外部终端;false:只输出到软件终端(有显示不全的可能)
"MIMode": "gdb",
"setupCommands": [ // 暂时不知道作用
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++ build active file", // 预编译任务名称,和tasks.json中的label必须相同
"miDebuggerPath": "/usr/bin/gdb" // 调试gdb路径
}
]
}
//tasks.json
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ build active file",
"command": "/usr/bin/g++",
"args": [
"-g","-std=c++11",
"${file}", // 单个cpp文件
// "${workspaceFolder}/Demo/*.cpp", // 多个cpp文件
// "${workspaceFolder}/src/*.cpp",
"-o",
"${fileDirname}/${fileBasenameNoExtension}", // 要调试的程序,必须与launch.json文件中的"program"相同
"-I", "${workspaceFolder}/include", // 项目include文件
"-I", "$/usr/local/include", // opencv安装的include文件路径
// "-I", "$/usr/local/include/opencv4",
// "-I", "$/usr/local/include/opencv4/opencv2",
"-L", "$/usr/local/lib", //opencv安装的lib文件路径
"-l", "opencv_core", //.so文件,文件原名称“libopencv_core.so”,注意需去除“lib”
"-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",
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "test",
"isDefault": true
},
"detail": "调试器生成任务"
}
],
"version": "2.0.0"
}
创个test.cpp测试一下
注意自己改一下图片路径
#include
#include
#include
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
cout << "hello,world" << endl;
Mat img1 = imread("/home/hongyu/Pictures/Screenshots/1.png", 1);
cv::imshow("img", img1);
while(waitKey(0) != 's');
return 0;
}
没问题
接下来就可以愉快的写代码了~