Arch Linux编译OpenCV 4.5.1源码并使用(包含contrib)模块


1. 前言

之前学校有一门课需要使用OpenCV,当时学期中没有Linux电脑,为了在Windows环境下快速使用,大家都用的是Visual Studio 2019 + OpenCV的环境来进行编程。这种情况下大家的项目都很复杂,而且有些函数使用的是Visual Studio下的专用语法。最近假期自己想重新实现一下之前OpenCV的有关代码。但是现在我不想使用Visual Studio这样的重量级IDE,而是更希望在VS Code下进行使用。又恰好之前的旧电脑现在用的是Linux系统,编译起来更加友好。因此最近折腾了一番,终于成功实现了Linux环境下OpenCV的源代码编译并使用。

需要和大家说明的是,我的编译和使用的过程主要参考的是官网给出的教程。但是官网教程默认的是Ubuntu,同时有一些细节对后续的使用有些影响,也请大家在参考时多多注意,不要踩了不必要的坑。


2. 安装过程

2.1 安装必要的依赖工具

sudo pacman -S git cmake wget unzip g++ make

2.2 下载OpenCV源码

git clone https://github.com/opencv/opencv
git -C opencv checkout <some-tag>

# optionally
git clone https://github.com/opencv/opencv_contrib
git -C opencv_contrib checkout <same-tag-as-opencv>

# optionally
git clone https://github.com/opencv/opencv_extra
git -C opencv_extra checkout <same-tag-as-opencv>
  • 这里的对应的是OpenCV版本号,我安装的是OpenCV 4.5.1,故使用命令git -C opencv checkout 4.5.1。
  • 后面两个是一些其他的OpenCV模块,为可选安装项。我在这里需要opencv-contrib的部分功能,因此也需要执行第二条命令。

2.3 配置编译选项

  • 新建文件夹
# 这里需要新建一个build文件夹,以存放编译后的源码
# 新建完成后进入该文件夹
mkdir -p build && cd build	
  • CMake编译
# 官方文档示例
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-master/modules ../opencv-master

# 我使用的命令
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -DOPENCV_GENERATE_PKGCONFIG=YES -DOPENCV_ENABLE_NONFREE=ON -DCMAKE_INSTALL_PREFIX=~/Tools/OpenCV_4.5.1/install ../opencv

这里官方文档只给出了opencv-contrib的编译选项,但我们仍需使用到一些其他选项便于后续使用。

  • -DOPENCV_EXTRA_MODULES_PATH=…/opencv_contrib/modules: 指定opencv_contrib模块路径
  • -DOPENCV_EXTRA_MODULES_PATH=…/opencv_contrib/modules: 生成.pc文件用于之后pkg-config
  • -DOPENCV_ENABLE_NONFREE=ON:使用第三方专利模块
  • -DCMAKE_INSTALL_PREFIX:最后OpenCV的安装路径

其他CMake编译选项参见官方文档: CMake编译选项

2.4 开始编译

# 确定线程数
nproc

# -j4 代表4线程,电脑老旧2333
cmake --build .	-j4  # 不要忽略最后的. ,代表构建到当前文件夹

编译过程中如遇到错误可参考此链接: 报错解决方案

2.5 安装

sudo make install

3. 使用配置

在编译结束后,为了使用OpenCV,我们还需要做一些配置,修改有关配置文件。

3.1 配置pkg-config

sudo vim /etc/profile.d/pkgconfig.sh
# 在最下面一行加入安装路径中的/lib/pkgconfig/文件夹

export PKG_CONFIG_PATH=/home/user/Tools/OpenCV_4.5.1/install/lib/pkgconfig:$PKG_CONFIG_PATH

# 刷新
source /etc/profile

# 测试是否成功
pkg-config --cflags --libs opencv4	# 若有-Lopencv_core等动态库结果,则成功

3.2 配置动态共享库链接

配置OpenCV动态库环境——程序执行时加载动态库*.so的路径。若不配置则g++无法识别动态库,会造成运行错误。

# 将安装路径下的lib文件夹加入到配置文件中
sudo vim /etc/ld.so.conf.d/opencv4.5.1.conf
# 将这行加入该文件
/home/user/Tools/OpenCV_4.5.1/install/lib/

# 使配置生效
sudo ldconfig

4. 进行测试

  1. 写一个简单的opencv程序test.cpp
// This is a program using opencv C++ to display an image

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;

int main() {
    Mat image;
    image = imread("/home/user/Pictures/test.jpg", 1);
    if ( !image.data ) {
        std::cout << "No image data" << std::endl;
        return -1;
    }

    namedWindow("Display Image", WINDOW_AUTOSIZE );
    imshow("Display Image", image);
    waitKey(0);

    return 0;
}
  1. 在命令行进行编译
g++ -g test.cpp -o test.out 'pkg-config --cflags --libs opencv4'
  1. 运行编译好的源文件
./test.out

可以发现成功显示出了图片,测试成功。


5. 总结

从源代码编译opencv看似简单,但是中间有不少坑要踩,自己前前后后编译了多次才算是完全满意,希望这篇文章能够让大家少走弯路。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值