书接上回 ZynqMp-Qt程序编译,开始编译Opencv。
1 下载源码
opencv版本3.4.5
ffmpeg版本4.0.5
zllib版本1.2.11
libpng版本1.6.35
tiff版本4.0.9
jpeg9d版本
x264-snapshots版本20171231-stable
v4l-utils版本1.14.2
xvidcore版本1.3.5
如果以上地址失效,可以下载Opencv依赖库源码+build_zynqmp.sh。
2 编译Host版本的库
需要先安装cmake
sudo apt-get install cmake
直接在Downloads文件夹下新建opencv文件夹,opencv-3.4.5.tar.gz、ffmpeg-3.4.7.tar.zx解压至该文件夹。
编写运行脚本,修改alinx的资料如下:
#!/bin/bash
export ZYNQMP_OPENCV_BUILD=/home/zxl/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 ~/Downloads/opencv/ffmpeg-3.4.7
./configure --enable-shared --disable-static --disable-x86asm --prefix=$ZYNQMP_OPENCV_BUILD
make -j8
make install
cd ~/Downloads/opencv/opencv-3.4.5
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 ~/Downloads/opencv/opencv-3.4.5
make -j8
make install
等待编译完成。如下
3 测试Host版本库
运行QtCreator,.pro文件加入如下代码添加opencv的库与头文件。
注意添加库文件时,是添加库名,非文件名。
mainwindow.ui中添加一个Label:piclabel。
mainwindow.h添加
//包含头文件
#include <cv.hpp>
#include <opencv.hpp>
//mainwindow类添加私有成员
private:
cv::Mat image;
mainwindow.cpp代码如下
运行如下
4 编译ZynqMp版本的库
解压opencv、ffmpeg、jped、libpng、tiff、v4l、x264、xvidcore、zlib至opencv文件夹。
参考 【Xilinx-Petalinux学习】-04-OpenCV的移植与alinx的资料编写运行脚本build_zynqmp.sh,设置可参考CMake交叉编译配置。然后直接运行脚本,等待编译完成。
编译tiff时 Error: “Invalid configuration ‘aarch64-linux-gnu’: machine ‘aarch64’ not recognized”的解决办法
5 测试ZynqMp版本库
QtCreator修改设置
test.pro修改如下
build…
之前有考虑过用Petalinux的rootfs配置来给系统镜像加入opencv,但发现opencv的依赖库好像凑不齐,于是还是制作opencv的镜像与执行文件一起拷到sd卡。
在zcu106上运行效果如下: