1361 字
7 分钟

编译OpenCV4.5.2版本移植到RK3568开发板

1.安装步骤#

1.1 准备工作#

  1. 准备工作一:执行指令sudo apt updatesudo apt upgrade以更新软件包列表和升级所有软件包
  2. 准备工作二:执行指令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 获取源码(这里以opencv4.5.2为例)#

  1. 从opencv官网获取源码。opencv官网 过程截图

    • 点击Sources下载源码。
    • 或者右键点击复制链接,使用wget指令下载。 过程截图
  2. 从我分享的链接获取源码opencv4.5.2源码

1.3 将源码解压到指定目录#

  1. 执行指令unzip 下载的压缩包 -d 要解压的目录,如将源码解压到/opt/opencv-4.5.2目录或像我一样解压在前目录。 过程截图

在我提供的压缩包解压完成后会有两个文件夹opencv-4.5.2opencv_contrib-4.5.2 过程截图

  1. 进入opencv-4.5.2目录并在里面创建一个build文件夹用于存放编译文件。

  2. 再用touch命令创建一个链接文件aarch64-toolchain.cmake(名字随意,后缀为.cmake,用的时候换名字就行),用于指定交叉编译工具链。 过程截图

aarch64-toolchain.cmake的内容如下:

aarch64-toolchain.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
# 编译器
set(CMAKE_C_COMPILER /home/zq/aarch64-rk3568-linux-gnu/bin/aarch64-buildroot-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER /home/zq/aarch64-rk3568-linux-gnu/bin/aarch64-buildroot-linux-gnu-g++)
# 系统根目录
set(CMAKE_SYSROOT /home/zq/aarch64-rk3568-linux-gnu/aarch64-buildroot-linux-gnu/sysroot)
# 查找路径设置
set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
# 编译器标志 - 添加 -pthread
set(CMAKE_C_FLAGS "--sysroot=${CMAKE_SYSROOT} -pthread" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS "--sysroot=${CMAKE_SYSROOT} -pthread" CACHE STRING "" FORCE)
# 链接器标志 - 添加 -lpthread -ldl -lm
set(CMAKE_EXE_LINKER_FLAGS "--sysroot=${CMAKE_SYSROOT} -lpthread -ldl -lm" CACHE STRING "" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS "--sysroot=${CMAKE_SYSROOT} -lpthread -ldl -lm" CACHE STRING "" FORCE)
set(CMAKE_MODULE_LINKER_FLAGS "--sysroot=${CMAKE_SYSROOT} -lpthread -ldl -lm" CACHE STRING "" FORCE)
# 强制设置 pthread 检测结果
set(CMAKE_HAVE_PTHREAD_H 1)
set(CMAKE_HAVE_PTHREAD_CREATE 1)
set(CMAKE_USE_PTHREADS_INIT 1)
set(Threads_FOUND TRUE)
set(HAVE_PTHREAD TRUE)
# 防止使用主机系统的包
set(CMAKE_IGNORE_PATH /usr/lib /usr/include /usr/local/lib /usr/local/include)
# 设置 protobuf 特定的变量
set(HAVE_PTHREAD ON)
set(HAVE_PTHREAD_H ON)

==这里说一下,这个是专门为RK3568开发板编译的,其他开发板请根据自己的情况修改。比如可能交叉编译工具不同,还有路径等都要做相应的更改==

编译OpenCV#

  1. 进入build目录。
  2. 执行指令如下 sudo cmake -D CMAKE_C_COMPILER=/home/zq/aarch64-rk3568-linux-gnu/bin/aarch64-linux-gcc -D CMAKE_CXX_COMPILER=/home/zq/aarch64-rk3568-linux-gnu/bin/aarch64-linux-g++ -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/opt/opencv-4.5.2-arm-linux -D CMAKE_TOOLCHAIN_FILE=../aarch64-toolchain.cmake -D BUILD_opencv_world=ON -D WITH_IPP=OFF -D WITH_TBB=OFF -D WITH_OPENMP=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_opencv_java_bindings_generator=OFF -D BUILD_opencv_js_bindings_generator=OFF -D BUILD_opencv_python_bindings_generator=OFF -D BUILD_opencv_python_tests=OFF -D BUILD_V4L2=ON -D OPENCV_EXTRA_MODULES_PATH=/home/zq/test/opencv_contrib-4.5.2/modules/face -D WITH_TIFF=OFF -D CMAKE_CXX_FLAGS="-std=c++11" -D OPENCV_LINKER_LIBS="-lpthread -ldl -lm" .. 生成构建文件(通常是 Makefile )。cmake并不是一个编译器,而是用于生成Makefile的工具,然后通过Makefile调用编译器进行编译构建。

其中参数部分解释如下: - CMAKE_C_COMPILERCMAKE_CXX_COMPILER:分别指定C和C++编译器的路径,这里由于是编译给开发板使用所以用的是交叉编译工具。
- CMAKE_BUILD_TYPE:指定编译模式,这里选择Release模式。
- CMAKE_INSTALL_PREFIX:指定安装路径,自己找个地方就行,这里选择/opt/opencv-4.5.2-arm-linux
- CMAKE_TOOLCHAIN_FILE:指定交叉编译工具链文件,这里选择../aarch64-toolchain.cmake。也就是刚才创建的那个。
- BUILD_opencv_world:个人推荐启用这个模块,这样编译出来的opencv.so文件会包含所有模块,这样在运行时就不需要再加载其他模块了。如果关闭的话它的动态库文件会很多到时候很难一个个添加。但是开启会增加其复杂性。
- WITH_IPP:是否启用IPP(Intel Performance Primitives)库,这里选择关闭。其指的是使用x86_64平台的头文件,因为开发板为ARM架构,所以不启用。
- WITH_TBB:是否启用TBB(Threading Building Blocks)库,这里选择关闭。TBB是一个用于并行编程的库,看情况启用。
- WITH_OPENMP:是否启用OpenMP库,这里选择关闭。OpenMP是一个用于并行编程的库,看情况启用。
- WITH_OPENCL:是否启用OpenCL库,这里选择关闭,因为OpenCL是用于GPU加速的,而RK3568开发板没有集成GPU,所以不启用。
- WITH_V4L2:是否启用V4L2库,这里选择开启,用于视频采集。
- 还有一些其它语言操作的以及测试和示例文件等都可以关闭,加快速度。
- OPENCV_EXTRA_MODULES_PATH:指定额外的模块路径,这里选择/home/zq/test/opencv_contrib-4.5.2/modules/face。是一个人脸识别的模块,在刚才解压出来的另一个文件夹下。其余模块自己添加。
- WITH_TIFF:是否启用TIFF库,这里选择关闭。TIFF是一种用于存储图像的文件格式,看情况启用。
- CMAKE_CXX_FLAGS:指定C++编译器的标志,这里选择-std=c++11
- OPENCV_LINKER_LIBS:指定链接器的标志,这里选择-lpthread -ldl -lm

过程截图

其中下载人脸检测相关的文件的时候可能比较慢 过程截图

出现以下内容,表示构建编译文件成功: 过程截图

运行sudo make -j8命令使用8线程进行编译,可根据实际情况调整线程数,编译时间可能较长。 过程截图

编译成功后如下: 过程截图

安装OpenCV#

  1. build目录执行指令sudo make install安装。
    过程截图
  2. 安装完成后,在/opt/opencv-4.5.2-arm-linux目录下就会有includelib两个文件夹,分别包含头文件和动态库文件。使用的时候记得把用到的动态库也拷贝过去,可以先执行看看缺找不到的库,然后再拷过去。或者如果支持的话可以先使用命令检查使用到的库也行。 过程截图
编译OpenCV4.5.2版本移植到RK3568开发板
https://demo-firefly.netlify.app/posts/compile-opencv452-version-and-transplant-it-to-rk3568-development-board/
作者
长琴
发布于
2025-11-21
许可协议
CC BY-NC-SA 4.0
最后更新于 2025-11-21

评论区

目录

Loading ... - Loading ...
封面
Loading ...
Loading ...
0:00 / 0:00