OpenCV编译
本文的前提是zynq交叉编译环境设置
- 下载opencv3.1.0源码,并解压
wget https://github.com/Itseez/opencv/archive/3.1.0.zip
- 在解压后的目录下新建两个目录:install,build,并新建
toolchain.cmake
文件,添加如下内容
set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_C_COMPILER arm-xilinx-linux-gnueabi-gcc) set(CMAKE_CXX_COMPILER arm-xilinx-linux-gnueabi-g++)
- 进入
bulid目录
进行命令配置,关联toolchain.cmake
文件并配置移植OpenCV的安装目录:
cmake -D CMAKE_TOOLCHAIN_FILE=toolchain.cmake -D CMAKE_INSTALL_PREFIX=/home/ubuntu/opencv-/install ../
注意此处应该更换为自己的实际目录名称。
- 生成Makefile文件
执行ccmake ./
进行OpenCV配置,将所有WITH开头的选项选成OFF(除了WITH_V4L为ON);按c键进行配置,g键产生Makefile
- 编译安装
通过make
编译,make install
进行安装;安装结束后Zedboard上的OpenCV库已经生成,在install
文件夹下。
OpenCV库移植
依次执行下面的命令,可以在指定的目录下生成opencv_lib.img
镜像文件,该文件可以在Zedboard上加载使用
cd /home/ubuntu/opencv_zynq/ // 生成镜像的目录 // 镜像的名字opencv_lib.img和大小80M,可以根据实际链接库的大小进行设置 mkfs.ext2 -F opencv_lib.img chmod go+w opencv_lib.img mount opencv_lib.img -o loop /mnt cp /home/ubuntu/opencv3.1.0/install/* /mnt // 复制相应的库的即将压缩的镜像中 chmod go-w opencv_lib.img umount /mnt
移植测试
测试代码,imgshow.cpp:
#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; int main() { Mat img = imread("test.jpg"); // 创建一个名为 "Pic"窗口 namedWindow("Pic"); // 在窗口中显示图片 imshow("Pic", img); // 等待6000 ms后窗口自动关闭 waitKey(); }
makefile:
LINK_C = imgshow.cpp LINK_H = -I /opt/opencv-3.1/include/opencv -I /opt/opencv-3.1/include -I /opt/opencv-3.1/include/opencv2 LINK_LIB = -L /opt/opencv-3.1/lib target: arm-xilinx-linux-gnueabi-g++ -O2 -I./ -o imgshow_arm $(LINK_C) -Wall -lm -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_imgcodecs $(LINK_H) $(LINK_LIB) #finished make imgshow_arm
编译后生成imgshow_arm.o
将OpenCV库文件opencv_lib.img
、可执行文件edge_detection.o
和原图像放入U盘中,启动Zedboard,挂载U盘:
mount /dev/sda1 /mnt
将镜像文件opencv_lib.img
挂载到/usr/lib
文件夹中:
cd /usr mkdir lib mount /mnt/opencv_lib.img /usr/lib
运行可执行文件./imgshow_arm.o