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(其实不在这里创建也完全没有关系,但是我习惯这样)

以下内容都太老旧了,创建的文件也多,现在改用CMakeLists.txt

Cmake

在code下创建一个CMakeLists.txt文件,再创建一个src目录用来存放源文件,一个include目录存放头文件

复制如下代码到CMakeLists.txt文件中

cmake_minimum_required (VERSION 3.0.0)

project (learn_cmake)

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build)

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

include_directories (/usr/local/include)

#test change

add_executable(test src/test.cpp)

#add_library(lib_name STATIC/SHARED src)

link_libraries(/usr/local/lib)

find_package(OpenCV REQUIRED)

include_directories(${OpenCV_INCLUDE_DIRS})

target_link_libraries(test ${OpenCV_LIBS})

.vscode

再使用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测试一下(cmake的话创建到src下)

注意自己改一下图片路径

#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;

}

cmake使用流程

建一个build文件夹和src平级,打开终端cd到build下,输入

cmake ..

再输入

make all

可执行文件会生成到build的bin文件夹下