前言

1.ubuntu环境 安装opencv4
2.编译opencv4 并移植到ARM64位开发板

正文

一、ubuntu环境 安装opencv4
1.安装opencv所需依赖库

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
安装gstreamer依赖文件
sudo apt-get -y install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libgstreamer1.0-dev
if No package ‘gtk+-3.0‘ found
sudo apt install -y libgtk-3-dev

2.下载opencv4源码
下载地址:https://opencv.org/releases/
在这里插入图片描述

3.安装CMake工具

sudo apt-get install cmake
sudo apt  install cmake-qt-gui
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config

4.配置CMake交叉编译OpenCV
4.1 将源码解压,并在目录下新建build/install文件夹
4.2 终端下直接运行cmake-gui
4.3 在cmake-gui配置 配置源码位路径和build路径
在这里插入图片描述
4.4 点击configure
4.5 因为我们此时是为ubuntu本机配置opencv4环境 所以直接选 Unix Makefiles Use default native compilers就行在这里插入图片描述
4.6 开启world模式 常规下编译opencv源码会生成很多库。如果在使用CMake生成VS解决方案时把BUILD_opencv_world选项勾上,则可以只生成一个库。
在这里插入图片描述4.7 设置build type
在这里插入图片描述4.8 设置install路径
在这里插入图片描述4.9 开启pkgconfig选项,否则无法生成opencv4.pc文件在这里插入图片描述

如果你发现你编译好的opencv有GTK冲突问题需要选择 -DWITH_GTK_2_X=ON
参考:https://www.freesion.com/article/7806192111/
在这里插入图片描述

4.10 再次点击 Configure 只能点击Generate
5. 进入刚才新建的build文件夹内 执行命令 make -j4 && make install 开始编译源码
在这里插入图片描述6.系统配置
6.1 执行以下命令编辑文件(如果没有就创建):

sudo gedit /etc/ld.so.conf.d/opencv.conf

6.2 在打开的opencv.conf文件尾部增加以下内容:
在这里插入图片描述

 (即 刚才设置的prefix路径 + /lib) 
 每个人的地址不一样不要直接复制粘贴

6.3 执行配置:

sudo ldconfig

6.4 执行以下命令编辑文件(如果没有就创建):

sudo gedit ~/.bashrc

在打开的bash.bashrc文件尾部增加以下内容:
在这里插入图片描述

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:刚才设置的prefix路径 + /lib/pkgconfig  
export PKG_CONFIG_PATH

生效环境变量

source ~/.bashrc

6.5 至此配置完成,退出控制台,再重新打开一个,执行命令
pkg-config --modversion opencv4
注意是opencv4,可以看到opencv的版本号:

pkg-config --modversion opencv4
4.5.4

至此ubuntu环境下的opencv4就安装完成了
7. 使用QT程序验证
7.1 pro文件添加 opencv第三方库

unix:!macx: LIBS += -L$$PWD/../../linux/world/opencv-4.5.4/install/lib/ -lopencv_world

INCLUDEPATH += $$PWD/../../linux/world/opencv-4.5.4/install/include/opencv4 \
               $$PWD/../../linux/world/opencv-4.5.4/install/include//opencv4/opencv2
DEPENDPATH += $$PWD/../../linux/world/opencv-4.5.4/install/include

7.2 main.cpp

#include<opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgproc.hpp>
#include<iostream>
#include<stdio.h>

using namespace cv;
using namespace std;

int main(int argc, char *argv[])
{
    Mat image = imread("/home/book/图片/报警弹窗.png");
    namedWindow("window", WINDOW_NORMAL);
    imshow("window",image);
    waitKey(0);
    return 0;
}

在这里插入图片描述
二、编译opencv4 并移植到ARM64位开发板
编译arm版本的opencv4 前5步几乎完全一样 但4.5 步骤不同请注意
4.5 cmake setup 选项 参考文献
请先确认已经配置好 自己的交叉编译链环境
在这里插入图片描述
PS:如果不想把交叉编译链设置为全家变量 可以选择 Specify options for cross-compling 去设置教程编译链 具体参考

选择 Specify toolchain file for cross-compling在这里插入图片描述选择你交叉编译链对应的cmake文件
在这里插入图片描述
路径在 /platforms/linux
在这里插入图片描述

编译时遇到的错误及解决方案 参考

问题一:

../../lib/libopencv_imgcodecs.so:对‘png_init_filter_functions_neon’未定义的引用
../../lib/libopencv_imgcodecs.so:对‘png_riffle_palette_rgba’未定义的引用
../../lib/libopencv_imgcodecs.so:对‘png_do_expand_palette_neon_rgb’未定义的引用
../../lib/libopencv_imgcodecs.so:对‘png_do_expand_palette_neon_rgba’未定义的引用
collect2: 错误: ld 返回 1

修改opencv下的 /3rdparty/libpng/pngpriv.h

130# if (defined(ARM_NEON) || defined(__ARM_NEON)) &&
改为
 #   if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \

开发板上的部署

打包拷贝:将上一步得到的install文件夹打包成tar或者tar.gz再拷贝到开发板的任意目录下,若不打包则拷贝时会提示某些文件无法复制过去,这里选择开发板中的/opt作为它的解压目录,/opt也是一般默认的软件包的安装位置,便于后续的环境变量的配置及日后的维护和查找。
添加动态库加载路径:运行Vim /etc/ld.so.conf.d/opencv.conf,会提示该文件不存在将新建一个新的conf文件,在打开的conf第一行里写上自己第一步解压的opencv的lib地址,如
/home/jbyyy/opencv4/lib
vim中输入:wq指令保存并退出,随后运行sudo ldconfig激活生效。
3. 环境变量配置:先将解压的opencv文件中位于/lib/pkgconfig下的opencv.pc进行修改:

# Package Information for pkg-config
prefix=/home/jbyyy/opencv4/
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.5.4
Libs: -L${exec_prefix}/lib -lopencv_dnn -lopencv_highgui -lopencv_ml -lopencv_objdetect -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_videoio -lopencv_imgcodecs -lopencv_features2d -lopencv_video -lopencv_photo -lopencv_imgproc -lopencv_flann -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir_old} -I${includedir_new}

将prefix修改为自己开发板上对应的opencv文件夹的路径如

prefix=/home/jbyyy/opencv4/

修改完成后保存退出,运行Vim /etc/bash.bashrc 在最后一行添加如下:

PKG_CONFIG_PATH=/home/jbyyy/opencv4/lib/pkgconfig:$PKG_CONFIG_PATH
 export PKG_CONFIG_PATH

注意将路径替换成自己对应的pkgconfig路径, vim中输入:wq指令保存并退出,随后运行source ~/.bashrc激活生效。
运行如下指令若出现如下路径输出则说明pkg配置成功。

pkg-config --modversion opencv4
4.5.4
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐