Ubuntu 安装 OpenCV (C++)
版本详情:
Ubuntu: 22.04 + 5.15.0-133-generic
gcc: 11.4.0
g++: 11.4.0
OpenCV: 4.7.0
1. 卸载 OpenCV
进入原先编译 opencv 的 build 目录,在该目录下打开终端,执行以下代码(如果 build 已经删除了,可以重新编译一遍该版本的 opencv,然后在最后一步执行 sudo make uninstall)
sudo make uninstall
cd ..
sudo rm -r build
sudo rm -r /usr/local/include/opencv4 /usr/local/include/opencv3 /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv4 /usr/include/opencv3 /usr/include/opencv2 /usr/include/opencv /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*
执行代码后可能会报错,忽略掉
sudo apt-get --purge remove opencv-doc opencv-data python-opencv
sudo apt-get autoremove opencv-doc opencv-data libopencv-dev libopencv2.4-java libopencv2.4-jni python-opencv libopencv-core2.4 libopencv-gpu2.4 libopencv-ts2.4 libopencv-photo2.4 libopencv-contrib2.4 libopencv-imgproc2.4 libopencv-superres2.4 libopencv-stitching2.4 libopencv-ocl2.4 libopencv-legacy2.4 libopencv-ml2.4 libopencv-video2.4 libopencv-videostab2.4 libopencv-objdetect2.4 libopencv-calib3d2.4
pkg-config opencv --libs pkg-config opencv --modversion
执行完以上步骤,一般就可以完全卸载OpenCV
2. 安装 OpenCV
(1) 更新软件包和安装工具
sudo apt update
sudo apt install -y cmake g++ wget unzip
(2) 安装必要的依赖项
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
(3) 下载 OpenCV
前往 OpenCV 官网,选择你需要的版本进行下载。通常,下载页面会提供不同格式的包,如源代码包(Sources)和预编译包(Pre-built binaries)等。也可以如下通过命令下载。
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.7.0.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.7.0.zip
unzip opencv.zip
unzip opencv_contrib.zip
如果不需要 opencv_contrib 则不需要下载
(4) 创建路径
mkdir opencv
mv -r ./opencv-4.7.0 ./opencv
mv -r ./opencv_contrib-4.7.0 ./opencv
cd opencv
mkdir build
cd build
如果不需要 opencv_contrib 则不需要移动
(5) 配置 CMake
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.7.0/modules/ ../opencv-4.7.0
注意最后两条的路径配置要正确。如果不需要 opencv_contrib 则不需要 -DOPENCV_EXTRA_MODULES_PATH。这里 -D CMAKE_BUILD_TYPE=Release 指定了构建类型为 Release(优化版本),-D CMAKE_INSTALL_PREFIX=/usr/local 指定了安装前缀为 /usr/local。
此外,据说还要增加 -DOPENCV_GENERATE_PKGCONFIG=ON,这是为了在 /usr/loacl/lib/pkgconfig/ 目录下自动生成 opencv4.pc 文件。这个可能是与下面 环境配置 一起构成 pkgconfig 的配置,如此可以完成下面 pkg 的 g++ 调用方式。
(6) 编译和安装
sudo make -j$(nproc)
sudo make install
(7) 测试
opencv_version
4.7.0
# pkg-config opencv --modversion # 4版本以下
3. 配置环境
实测不需要下面的环境配置,OpenCV 依然可以使用,但大部分教程都有下面的环境配置环节,所以这里也记录了环境配置过程
(1) 配置库文件
在 /etc/ld.so.conf.d/ 加入对于库的 .conf 文件,首先新建 opencv.conf
sudo vim /etc/ld.so.conf.d/opencv.conf
打开文件之后输入(可能是个空文件,没关系)
/usr/local/lib
输入以下代码,将 /etc/ld.so.conf.d 中的数据读入缓存
sudo ldconfig
(2) 配置环境变量
添加 pkg-config 环境变量,打开文件之后输入路径
sudo vim ~/.bashrc
把这个路径添加在文件最后(如果不是/usr/local路径下,则改成自己的路径)
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
更新环境变量
source ~/.bashrc
以上所有命令的具体含义和解释可以参考最后参考链接 1。
完成 OpenCV 安装后,如果空间不够,完全可以删除上面的 opencv 文件夹,以及两个 zip 文件。
4. 编译 OpenCV 程序
安装完成后,可以发现 OpenCV 被安装到 /usr/local/include/opencv4
(1) g++ 编译
必须加上后面这一长串,否则找不到头文件或者库文件
g++ your_program.cpp -o your_program -I/usr/local/include/opencv4 -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs
#
这里
-I/usr/local/include/opencv4指定了头文件搜索路径,
-L/usr/local/lib指定了库文件搜索路径,
-lopencv_...指定了要链接的库。
#
或者使用如下命令,上面 配置环境 那一步可能会影响到下面这一命令,未测试。
g++ `pkg-config opencv --cflags` your_program.cpp -o your_program `pkg-config opencv --libs`
(2) CMakeList 编译
路径结构
inculde 语句
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
using namespace cv; //OpenCV 的命名空间
编译命令
mkdir build
cd build/
cmake ..
make
CMakeList.txt 文件如下,其中 AVM2D 是我的源文件名。
# cmake needs this line
cmake_minimum_required(VERSION 3.1)
# Define project name
project(AVM2D_project)
# Find OpenCV, you may need to set OpenCV_DIR variable to the absolute path to the directory containing OpenCVConfig.cmake file via the command line or GUI
find_package(OpenCV REQUIRED)
# If the package has been found, several variables will be set, you can find the full list with descriptions in the OpenCVConfig.cmake file.
# Print some message showing some of them
message(STATUS "OpenCV library status:")
message(STATUS " config: ${OpenCV_DIR}")
message(STATUS " version: ${OpenCV_VERSION}")
message(STATUS " libraries: ${OpenCV_LIBS}")
message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")
# Declare the executable target built from your sources
add_executable(AVM2D AVM2D.cpp)
# Link your application with OpenCV libraries
target_link_libraries(AVM2D PRIVATE ${OpenCV_LIBS})
关于 OpenCV 下 CMakeList.txt 的使用方式参考如下链接 4。通过 set() 命令可以指定 OpenCV 包的搜索路径。
参考链接:
1. ubuntu opencv 安装
2. OpenCV安装(Ubuntu)
3. 04【安装】【避坑指南】Ubuntu中安装OpenCV
4. opencv在 Cmakelist的写法以及编译详解
5. Ubuntu系统---编译opencv程序的几种方式g++、Makefile、Cmake
6. opencl 安装centos linux安装opencv4