Linux为树莓派交叉编译OpenCV

Linux为树莓派交叉编译OpenCV

获取源代码

在Docker中编译OpenCV前需要对DockerFile做一些简单配置,针对不同版本可以参考整合项目raspberrypi3-opencv-docker
可以从OpenCV官网获取源文件(GIthub)。如有需要也可以同时编译扩展仓库opencv_contrib

编译源码

方法1:

该方案会出现GUI无法安装的问题,导致无法调用可视化接口,如果没有可视化需求可以使用这个方案。

  1. 以OpenCV3.4.2为例,opencv的交叉编译工具链在../opencv3.2.0/platforms/linux 路径下,linux文件夹下是一些.cmake文件,对应不同的移植对象,aarch64-gnu.toolchain.cmake 工具链。
  2. 在进行编译前,需要修改cmake文件,修改platform/linux/aarch64-gnu.toolchain.cmake,改为如下:
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(GCC_COMPILER_VERSION "" CACHE STRING "GCC Compiler version")
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
set(GNU_MACHINE "aarch64-linux-gnu" CACHE STRING "GNU compiler triple")
include("${CMAKE_CURRENT_LIST_DIR}/arm.toolchain.cmake")
  1. 接下来执行交叉编译指令:
cmake -D CMAKE_MAKE_PROGRAM:PATH=/usr/bin/make \
      -D CMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-gnu.toolchain.cmake \
      -D CMAKE_INSTALL_PREFIX=../install_rpi \
      -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.6.0/modules \
      -D OPENCV_GENERATE_PKGCONFIG=YES \
      ..

方法2:

指定编译工具链

  1. 直接执行交叉编译指令:
    在opencv3.2.0下新建文件夹 install_rpi和build,进入build,执行:
cmake -D CMAKE_MAKE_PROGRAM=/usr/bin/make \
      -D CMAKE_C_COMPILER=aarch64-linux-gnu-gcc \
      -D CMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \
      -D WITH_QT=ON \
      -D CMAKE_INSTALL_PREFIX=../install_rpi \
      -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.6.0/modules \
      -D OPENCV_GENERATE_PKGCONFIG=YES \
      -D BUILD_TIFF=ON \
      -D BUILD_JPEG=ON \
      ..

安装

make install

编译结束后进入 install_rpi文件夹,里面生成bin,include,lib,share四个文件夹即为最终编译结果。将其拷贝至树莓派/usr/local目录配置环境变量即可。

如果添加-D CMAKE_BUILD_TYPE=RELEASE参数则不会生成bin文件夹

配置环境变量

其实只用配主机,能够编译即可。

设置/etc/ld.so.conf.d/opencv.conf

vim /etc/ld.so.conf.d/opencv.conf

在opencv.conf中添加opencv拷贝的路径:

# 添加lib文件夹
/usr/local/opencv4.6/lib

image.png|425
加载操作:

ldconfig

设置/etc/bash.bashrc

vim /etc/bash.bashrc

添加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/local/opencv4.6/lib/pkgconfig
export PKG_CONFIG_PATH

更新环境变量:

source /etc/bash.bashrc

其实有更简单的方案,直接在树莓派安装OpenCV:sudo apt-get install.参考Q-engineering

# **only C++**  
$ sudo apt-get install libopencv-dev

# need Python also?
$ sudo apt-get install python3-opencv

测试

pkg-config --modversion opencv

输出正确版本号则证明安装成功
image.png|415

Demo

  1. 编写绘图测试程序 test_opencv.cpp
#include <opencv2/imgcodecs.hpp>  
#include <opencv2/highgui.hpp>  
#include <opencv2/imgproc.hpp>  
#include <iostream>  
   
using namespace cv;  
using namespace std;  
   
int main()  
{  
    Mat img(512, 512, CV_8UC3, Scalar(255, 255, 255));  
    circle(img, Point(256, 256), 256, Scalar(0, 0, 255), FILLED);  
    Rect roi(128, 128, 256, 256);  
    rectangle(img, roi, Scalar(255, 255, 255), FILLED);  
    line(img, Point(256, 128), Point(256, 256), Scalar(255, 255, 0), 3);  
    putText(img, "I'am CV", Point(256, 128), FONT_HERSHEY_DUPLEX, 1, Scalar(0, 0, 0), 2);  
    imshow("img", img);  
    waitKey(0);  
    return 0;  
}
  1. 编写Makefile:CMakeLists.txt
PROJECT (test_opencv)  
   
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)  
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)  
  
  
# add OpenCV DEP  
set(OpenCV_DIR "/usr/local/opencv4.6/share/OpenCV") 
find_package(OpenCV REQUIRED)  
MESSAGE(STATUS "Project: ${PROJECT_NAME}")  
MESSAGE(STATUS "OpenCV library status:")  
MESSAGE(STATUS "    version: ${OpenCV_VERSION}")  
MESSAGE(STATUS "    libraries: ${OpenCV_LIBS}")  
MESSAGE(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")  
  
include_directories(${PROJECT_SOURCE_DIR}/include/)  
LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib)  
  
   
add_executable (test_opencv "test_opencv.cpp")  
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS} -lpthread)
  1. 编译
mkdir build
cmake ..
make 
  1. 运行
./test_opencv
  1. 运行结果
    image.png
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有胡子的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值