0 关于
- Ubuntu版本:Ubuntu 20.04
- OpenCV演示版本:4.10.0
- 本文参考了多篇博客和教学视频,经本人亲测安装成功,故总结提炼供大家参考。
- 若在安装过程出现任何问题欢迎评论、私信与我交流,不过请描述清楚你遇到的问题。
1 安装步骤
1.1 准备工作
- 准备工作一:执行指令
sudo apt update
和sudo apt upgrade
以更新软件包列表和升级所有软件包 - 准备工作二:执行指令
sudo apt-get install -y unzip cmake build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
安装opencv所需要的构建工具和依赖库。
1.2 获取源码文件并解压
- 进入官网。官网地址:官网地址
- 获取某个版本(演示4.10.0)的下载链接。官网陈列了多个版本,鼠标移动到对应版本的Sources上右击鼠标选择“复制链接地址”,得到链接地址:https://github.com/opencv/opencv/archive/refs/tags/4.10.0.zip,你也可以直接使用我这个地址。
- 执行指令
wget https://github.com/opencv/opencv/archive/refs/tags/4.10.0.zip
下载源码压缩包。
- 执行指令
unzip 4.10.0.zip
解压源码压缩包,之后执行ls
指令可以发现生成了opencv-4.10.0文件夹。
1.3 编译并安装
-
执行指令
cd opencv-4.10.0/ && mkdir build && cd build
在解压后的文件夹创建一个build目录并进入build目录,该目录用于保存构建过程的中间文件。执行指令之前请确保当前处于opencv目录。
-
执行指令
sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
以生成构建文件(通常是 Makefile )。cmake并不是一个编译器,而是用于生成Makefile的工具,然后通过Makefile调用编译器进行编译构建,如make -j4
(后续马上会用)。 指令执行成功时如下图所示。- CMAKE_BUILD_TYPE=Release: 指定编译类型为Release
- CMAKE_INSTALL_PREFIX=/usr/local: 指定安装路径,默认安装在/usr/local目录下
-
执行指令
sudo make -j8
使用Makefile对项目进行编译构建。- -j8:指定使用8个CPU核进行编译,这个数字根据自己机器情况决定。
- -j8:指定使用8个CPU核进行编译,这个数字根据自己机器情况决定。
-
执行指令
sudo make install
安装OpenCV。
1.4 编写配置文件
-
执行
sudo nano /etc/ld.so.conf
打开配置文件并编辑,在配置文件中添加一行/usr/local/lib
。随后依次按Ctrl+S
和Ctrl+X
保存并退出配置文件。/etc/ld.so.conf
是Linux系统中的一个重要配置文件,它用于指定动态链接器(ld.so)搜索动态库(共享库)的路径。动态链接器是负责在程序运行时加载共享库的系统组件。- 添加
/usr/local/lib
是因为前文cmake指令的CMAKE_INSTALL_PREFIX=/usr/local
指定了安装目录为usr/local
,所以opencv会把动态库放在/usr/local/lib
中,在配置文件添加后即可搜索到opencv的动态库。
-
执行指令
ldconfig
使配置文件生效。 -
执行指令
cd /usr/local/lib && mkdir pkgconfig && cd pkgconfig && nano opencv.pc
在/usr/local/lib/pkgconfig
目录下创建一个名为opencv.pc
的配置文件。该.pc 文件是 pkg-config 的配置文件,用于在编译和链接时提供库的编译和链接信息。pkg-config
是一个帮助程序,用于自动检测系统中的库,并为编译器和链接器提供必要的标志。 -
在上述打开的.pc配置文件中添加如下内容:
prefix=/usr/local exec_prefix=${prefix} includedir=/usr/local/include libdir=/usr/local/lib Name: OpenCV Description: Open Source Computer Vision Library Version: 4.10.0 Libs: -L${exec_prefix}/lib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_flann -lopencv_xobjdetect -lopencv_imgcodecs -lopencv_objdetect -lopencv_xphoto -lopencv_imgproc -lopencv_core Libs.private: -ldl -lm -lpthread -lrt Cflags: -I${includedir}
解释:
- prefix=/usr/local:这是安装前缀,指定了库文件、头文件等的安装基础目录。
- exec_prefix=${prefix}:这是可执行文件的安装前缀,通常与 prefix 相同,用于存放可执行文件和库文件。
- includedir=/usr/local/include:头文件的安装目录,编译时需要包含这个目录以访问库的头文件。
- libdir=/usr/local/lib:库文件的安装目录,链接时需要指定这个目录以访问库文件。
- Name: OpenCV:库的名称,这里是 OpenCV(Open Source Computer Vision Library)。
- Description: Open Source Computer Vision Library:库的描述,这里是“开源计算机视觉库”。
- Version: 4.4.0:库的版本号,这里是 4.4.0。
- Libs: -L${exec_prefix}/lib -lopencv_stitching … -lopencv_core:链接时需要的库和标志。-L 指定库文件搜索路径,-l 指定要链接的库。这里列出了 OpenCV 的所有模块和它们对应的库。
- Libs.private: -ldl -lm -lpthread -lrt:这些是 OpenCV 私有的链接库,可能不直接用于 OpenCV 的功能,但是 OpenCV 的某些功能可能依赖于这些库。例如,-ldl 链接动态链接库,-lm 链接数学库,-lpthread 链接 POSIX 线程库,-lrt 链接实时库。
- Cflags: -I${includedir}:编译时需要的标志。-I 指定头文件搜索路径,这里指定了头文件所在的目录。
-
执行指令
sudo nano /etc/bash.bashrc
打开bash的配置文件并编辑,在文件中添加两行内容:PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
和export PKG_CONFIG_PATH
。
- PKG_CONFIG_PATH 是一个环境变量,用于指定 pkg-config 工具搜索 .pc 配置文件的路径。pkg-config 是一个帮助程序,用于在编译和链接时查找库的编译和链接标志。
- /etc/bash.bashrc和~/.bashrc的区别:
- 前者是一个全局的 Bash 配置文件,存在于系统级别。当任何用户以交互式方式登录系统时(无论是通过终端还是远程登录),Bash 都会读取这个文件。
- 后者是一个用户的 Bash 配置文件,存在于用户的主目录中(即用户的 home 目录)。这个文件通常用于设置用户特定的环境变量、别名和函数,这些设置只对文件所有者的用户生效。
-
执行指令
source /etc/bash.bashrc
使配置文件生效。 -
执行指令
pkg-config opencv --modversion
查看是否安装成功。
2 编写cpp文件检验安装是否成功
执行下图中的指令,若出现图示结果说明安装成功。其中test.cpp和CMakeLists.txt文件的内容见下文。
- test.cpp文件:
#include <iostream> #include <opencv2/opencv.hpp> int main() { // 打印OpenCV版本 std::cout << "OpenCV version: " << CV_VERSION << std::endl; // 检查OpenCV模块是否加载成功 try { // 尝试加载OpenCV模块 cv::Mat testMat = cv::Mat::eye(3, 3, CV_64F); std::cout << "OpenCV is installed and working properly." << std::endl; } catch (const std::exception& e) { std::cerr << "OpenCV installation or usage issue: " << e.what() << std::endl; } return 0; }
- CMakeLists.txt:
cmake_minimum_required(VERSION 2.8) project( test ) find_package( OpenCV REQUIRED ) add_executable( test test.cpp ) target_link_libraries( test ${OpenCV_LIBS} )