分享

RK3399的opencv交叉编译,QT运行

 beginnow1 2022-12-06 发布于广东

1 下载源码

opencv版本3.4.9
ffmpeg版本2.8.6
zlib版本1.2.11
libpng版本1.6.21
tiff版本4.0.6
jpeg9d版本 
x264-snapshots版本20160131-stable
v4l-utils版本1.12.5
xvidcore版本1.3.7

可选:zbar版本1.2.11

如果以上地址失效,可以下载Opencv依赖库源码+build_zynqmp.sh

2 编译Host版本的库

需要先安装cmake

sudo apt-get install cmake

用户目录下新建tools里面再建opencv文件夹,opencv-3.4.9.tar.gz、ffmpeg-2.8.6.tar.zx解压至该文件夹。
编写运行脚本如下所示,记得更改路径用户名:

#!/bin/bash
export ZYNQMP_OPENCV_BUILD=/home/element/tools/opencv_host_lib
export LD_LIBRARY_PATH=$ZYNQMP_OPENCV_BUILD/lib:${LD_LIBRARY_PATH}
export C_INCLUDE_PATH=$ZYNQMP_OPENCV_BUILD/include:${C_INCLUDE_PATH}
export CPLUS_INCLUDE_PATH=$ZYNQMP_OPENCV_BUILD/include:${CPLUS_INCLUDE_PATH}
export PKG_CONFIG_PATH=$ZYNQMP_OPENCV_BUILD/lib/pkgconfig:${PKG_CONFIG_PATH}

sudo mkdir $ZYNQMP_OPENCV_BUILD
sudo chmod 777 $ZYNQMP_OPENCV_BUILD

cd ~/tools/opencv/ffmpeg-2.8.6
./configure --enable-shared --disable-static --disable-x86asm --prefix=$ZYNQMP_OPENCV_BUILD
make -j8
make install

cd ~/tools/opencv/opencv-3.4.9

mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE   -D WITH_IPP=OFF   -D WITH_IPP_A=OFF   -D BUILD_opencv_nonfree=OFF   -D CMAKE_INSTALL_PREFIX=$ZYNQMP_OPENCV_BUILD ~/tools/opencv/opencv-3.4.9
make -j8
make install

等待编译完成。如下
在这里插入图片描述

3 测试Host版本库

运行QtCreator,.pro文件加入如下代码添加opencv的库与头文件。

TEMPLATE = app
CONFIG += console c++11 -mfloat-abi=hard
CONFIG -= app_bundle
CONFIG -= qt

INCLUDEPATH += /home/element/tools/MNN/include 
LIBS += /home/element/tools/opencv_host_lib/lib/lib*.so* 

SOURCES +=         main.cpp

注意添加库文件时,是添加库名,非文件名。
mainwindow.ui中添加一个Label:piclabel。
mainwindow.h添加

//包含头文件
#include <opencv/cv.hpp>
#include <opencv2/opencv.hpp>

//mainwindow类添加私有成员
private:
	cv::Mat image;

mainwindow.cpp代码如下
在这里插入图片描述

4 编译ZynqMp版本的库

解压opencv、ffmpeg、jped、libpng、tiff、v4l、x264、xvidcore、zlib、zbar放至新建的scr_pkg文件夹。参考 【Xilinx-Petalinux学习】-04-OpenCV的移植与alinx的资料

在tools目录编写运行脚本opencv_build_arm64.sh,设置可参考CMake交叉编译配置

脚本如下:

#!/bin/sh
#SDK_PATH=/opt/pkg/xsdk/SDK/2018.3
#if [ ! -d $SDK_PATH ]; then
#  echo "no dir ${SDK_PATH}"
#  exit 1
#fi

#source ${SDK_PATH}/settings64.sh 
#export CROSS_COMPILE=arm-xilinx-linux-gnueabi
export CROSS_COMPILE=aarch64-linux-gnu
export ZYNQ_CV_BUILD=//home/element/tools/opencv_arm64_lib
Cur_Dir=$(pwd)
export LD_LIBRARY_PATH=$ZYNQ_CV_BUILD/lib:${LD_LIBRARY_PATH}
export C_INCLUDE_PATH=$ZYNQ_CV_BUILD/include:${C_INCLUDE_PATH}
export CPLUS_INCLUDE_PATH=$ZYNQ_CV_BUILD/include:${CPLUS_INCLUDE_PATH}
export PKG_CONFIG_PATH=$ZYNQ_CV_BUILD/lib/pkgconfig:${PKG_CONFIG_PATH}
#export PKG_CONFIG_LIBDIR=/opt/Xilinx/SDK/2015.4/gnu/arm/lin/arm-xilinx-linux-gnueabi/lib
export PKG_CONFIG_LIBDIR=/opt/gcc-aarch64-linux-gnu/aarch64-linux-gnu/lib64
OPENCV_SRC=opencv-3.4.9
TMP_DIR=zynq_src_tmp

sudo mkdir $ZYNQ_CV_BUILD
sudo chmod 777 $ZYNQ_CV_BUILD

mkdir $TMP_DIR
cp -r -f $Cur_Dir/src_pkg/* $Cur_Dir/$TMP_DIR
cd $Cur_Dir/$TMP_DIR/v4l-utils-1.12.5
./bootstrap.sh
./configure --prefix=$ZYNQ_CV_BUILD --host=${CROSS_COMPILE} --without-jpeg --with-udevdir=$ZYNQ_CV_BUILD/lib/udev
make -j8
make install

cd $Cur_Dir/$TMP_DIR/zlib-1.2.11
export CC=${CROSS_COMPILE}-gcc
./configure --prefix=$ZYNQ_CV_BUILD --shared
make
make install

cd $Cur_Dir/$TMP_DIR/jpegsrc.v9b/jpeg-9b
./configure --prefix=$ZYNQ_CV_BUILD --host=${CROSS_COMPILE} --enable-shared
make
make install


cd $Cur_Dir/$TMP_DIR/libpng-1.6.21
./configure --prefix=$ZYNQ_CV_BUILD --host=${CROSS_COMPILE} --with-pkgconfigdir=$ZYNQ_CV_BUILD/lib/pkgconfig LDFLAGS=-L$ZYNQ_CV_BUILD/lib CFLAGS=-I$ZYNQ_CV_INSTALL/include
make
make install


cd $Cur_Dir/$TMP_DIR/x264-snapshot-20160131-2245-stable
./configure --host=aarch64-linux --cross-prefix=${CROSS_COMPILE}- --enable-shared --prefix=$ZYNQ_CV_BUILD
make
make install

cd $Cur_Dir/$TMP_DIR/xvidcore-1.3.7/xvidcore/build/generic
./configure --prefix=$ZYNQ_CV_BUILD --host=${CROSS_COMPILE} --disable-assembly
make
make install


cd $Cur_Dir/$TMP_DIR/tiff-4.0.6
./configure --prefix=$ZYNQ_CV_BUILD --host=${CROSS_COMPILE} --enable-shared LDFLAGS=-L$ZYNQ_CV_BUILD/lib CFLAGS=-I$ZYNQ_CV_BUILD/include
make
make install


cd $Cur_Dir/$TMP_DIR/ffmpeg-2.8.6
./configure --prefix=$ZYNQ_CV_BUILD --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm64 --disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cross-prefix=${CROSS_COMPILE}- --enable-swscale --extra-cflags=-I$ZYNQ_CV_BUILD/include --extra-ldflags=-L$ZYNQ_CV_BUILD/lib --disable-asm
make -j8
make install


cd $Cur_Dir/$TMP_DIR/zbar-0.10
 ./configure --prefix=$ZYNQ_CV_BUILD --host=${CROSS_COMPILE} --enable-shared --without-jpeg --without-python --without-gtk --without-qt --disable-video --without-imagemagick
 LDFLAGS=-L$ZYNQ_CV_BUILD/lib CFLAGS=-I$ZYNQ_CV_BUILD/include
 make
 make install


cd $Cur_Dir/$TMP_DIR/$OPENCV_SRC
mkdir build
cd build
echo "set( CMAKE_SYSTEM_NAME Linux )" > toolchain.make
echo "set( CMAKE_SYSTEM_PROCESSOR arm )" >> toolchain.make
echo "set( CMAKE_C_COMPILER ${CROSS_COMPILE}-gcc )" >> toolchain.make
echo "set( CMAKE_CXX_COMPILER ${CROSS_COMPILE}-g++ )" >> toolchain.make
echo "set( CMAKE_INSTALL_PREFIX $ZYNQ_CV_BUILD )" >> toolchain.make
echo "set( CMAKE_FIND_ROOT_PATH $ZYNQ_CV_BUILD )" >> toolchain.make
echo "set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )" >> toolchain.make
echo "set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )" >> toolchain.make
echo "set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )" >> toolchain.make
cmake -D CMAKE_TOOLCHAIN_FILE=toolchain.make   -D BUILD_DOCS=OFF    -D BUILD_opencv_nonfree=OFF   -D BUILD_JPEG=OFF    -D BUILD_PACKAGE=OFF   -D BUILD_PERF_TESTS=OFF   -D BUILD_PNG=OFF    -D BUILD_SHARED_LIBS=ON   -D BUILD_TESTS=OFF     -D BUILD_TIFF=OFF    -D BUILD_WITH_DEBUG_INFO=OFF    -D BUILD_ZLIB=OFF     -D BUILD_opencv_apps=OFF    -D BUILD_opencv_calib3d=ON   -D BUILD_opencv_videostab=ON   -D BUILD_opencv_world=OFF   -D WITH_1394=OFF    -D WITH_CUDA=OFF    -D WITH_CUFFT=OFF    -D WITH_EIGEN=OFF    -D WITH_GIGEAPI=OFF    -D WITH_GPHOTO2=OFF    -D WITH_GTK=OFF    -D WITH_GSTREAMER=OFF     -D WITH_JASPER=OFF     -D WITH_LIBV4L=OFF   -D WITH_MATLAB=OFF   -D WITH_OPENCL=OFF   -D WITH_OPENCLAMDBLAS=OFF   -D WITH_OPENCLAMDFFT=OFF   -D WITH_OPENEXR=OFF   -D WITH_PTHREADS_PF=OFF   -D WITH_PVAPI=OFF   -D WITH_V4L=ON    -D WITH_JPEG=ON     -D WITH_PNG=ON     -D WITH_TIFF=ON     -D WITH_FFMPEG=ON    -D WITH_WEBP=OFF $Cur_Dir/$TMP_DIR/$OPENCV_SRC
#ccmake . 
cp -r -f $ZYNQ_CV_BUILD/lib/* $Cur_Dir/$TMP_DIR/$OPENCV_SRC/build/lib
make -j8
sudo make install
cd $Cur_Dir

然后直接运行脚本,等待编译完成,在opencv_host_lib出现编译完的文件。

在这里插入图片描述

编译tiff时 Error: “Invalid configuration 'aarch64-linux-gnu’: machine 'aarch64’ not recognized”的解决办法

5 测试ZynqMp版本库

QT的环境配置参考:https://blog.csdn.net/hl1796/article/details/90205218

test.pro修改如下

TEMPLATE = app
CONFIG += console c++11 -mfloat-abi=hard
CONFIG -= app_bundle
CONFIG -= qt

INCLUDEPATH += /home/element/tools/MNN/include                /home/element/tools/opencv_arm64_lib/include

LIBS += /home/element/tools/opencv_arm64_lib/lib/lib*.so*         /home/element/tools/MNN/build/libMNN.so

SOURCES +=         main.cpp

build~运行Vehicle-Detection-MNN-Yolo-Fastest项目,效果如下

  ——问题——

lib/libopencv_calib3d.so:-1: error: error adding symbols: File in wrong format

用错opencv的版本,需要用交叉编译出来的版本。

致命错误: intmath.h:没有那个文件或目录

编译后的incluld里的文件不齐全,再次sh opencv_build_arm64.sh 解决问题

参考链接:https://blog.csdn.net/zhuxl24/article/details/105987830

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多