编译OpenCV4.5.2版本移植到RK3568开发板
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 获取源码(这里以opencv4.5.2为例)
-
从opencv官网获取源码。opencv官网

- 点击
Sources下载源码。 - 或者右键点击复制链接,使用wget指令下载。

- 点击
-
从我分享的链接获取源码opencv4.5.2源码
1.3 将源码解压到指定目录
- 执行指令
unzip 下载的压缩包 -d 要解压的目录,如将源码解压到/opt/opencv-4.5.2目录或像我一样解压在前目录。
在我提供的压缩包解压完成后会有两个文件夹opencv-4.5.2和opencv_contrib-4.5.2

-
进入
opencv-4.5.2目录并在里面创建一个build文件夹用于存放编译文件。 -
再用
touch命令创建一个链接文件aarch64-toolchain.cmake(名字随意,后缀为.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)
# 编译器标志 - 添加 -pthreadset(CMAKE_C_FLAGS "--sysroot=${CMAKE_SYSROOT} -pthread" CACHE STRING "" FORCE)set(CMAKE_CXX_FLAGS "--sysroot=${CMAKE_SYSROOT} -pthread" CACHE STRING "" FORCE)
# 链接器标志 - 添加 -lpthread -ldl -lmset(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
- 进入
build目录。 - 执行指令如下
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_COMPILER和CMAKE_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
- 在
build目录执行指令sudo make install安装。

- 安装完成后,在
/opt/opencv-4.5.2-arm-linux目录下就会有include和lib两个文件夹,分别包含头文件和动态库文件。使用的时候记得把用到的动态库也拷贝过去,可以先执行看看缺找不到的库,然后再拷过去。或者如果支持的话可以先使用命令检查使用到的库也行。