把OpenCV移植到ZedBoard上的那些事

前面我们已经基本了解了什么是openCV,这一片我们首先明确,移植OpenCV到ZedBoard上需要两大过程。


1、opencv在ubuntu上的安装与测试 2、opencv在zedboard上的移植与测试

我们直接说第二步,第一步网上有许多教程。

我们首先要明确:移植opencv需要在交叉编译环境已经搭建好的基础下进行
我们都知道pc的可执行程序不能直接在arm板卡上运行,pc机与arm采用的就体系结构不同,两个可以执行的二进制代码不一样,要是使用还是有办法的,那就是交叉编译,交叉编译的目的就是在主机上生成目标机(zedboard)能执行的文件。其实zedboard已经将交叉编译的文件给我们了,只需要执行几个简单的指令就可以了


用  ./xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin 安装文件会出现错误,

在终端里输入如下命令 dpkg-reconfigure dash,并且在弹出的对话框里选择 <否>即可

可以安装的时候,就一路默认下去吧,不过这个时候最好注意下文件安装到哪个地方了。

 
  

这个时候你就可以找到类似于gcc一样的交叉编译工具了


在ubuntu中,环境变量的文件是 /etc/bash.bashrc,修改这个文件就行了(命令vim /etc/bash.bashrc),增加的内容是

export ARCH=arm

export CROSS_COMPILE=arm-xilinx-linux-gnueabi-

export PATH=/root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/:$PATH


此时保存文件,并且关闭终端,重新打开一个终端 输入arm-xilinx 按几下tab键是不是显示出来了可爱的交叉编译链。到此说明交叉编译链安装完成


交叉编译链安装成功了,就可以交叉编译c文件了,进入到/opt/zedboard/code/文件夹下面,使用arm-xilinx-linux-gnueabi-gcc helloworld.c -o helloworld_zed,来生成在zed板卡上能执行的文件。


到这里我们只是安装好了交叉编译链,接下来就让我们把OpenCV移植过来吧。


进入opencv3.1.0目录, 新建一个build和install目录,并且新建一个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++)
进入build目录,输入
cmake -D CMAKE_TOOLCHAIN_FILE=toolchain.cmake -D 
CMAKE_INSTALL_PREFIX=/opt/zedboard/opencv_zed/opencv-3.1.0/install   ../

 
  
 
  
 
  
接着进行ccmake ./ 配置,配置的内容与pc机上有很大区别,将所有WITH开头的选项选成OFF(除了WITH_V4L为ON)因为这些需要第三方库支持的,要是选择这些的话就需要安装第三方库了。
按 c 键配置   按g键生成并保存
开始进行 make 编译  然后make install 安装。
安装完成后在install的文件夹里就是运行库啦
zedboard板子装的linux系统一般是官方给的OOB安装包,实际上是ramdisk镜像,一个非常简易的linux操作系统, 最大只能有8M。我们在测试的过程中 要可执行文件与opencv的动态库拷贝到sd卡,或u盘,而库文件会大于8M,所以需要 将opencv链接库文件压缩为一个镜像文件。


制作镜像文件的方法:

cd   /opt/zedboard/opencv_zed/

dd if=/dev/zero of=qt_lib.img bs=1M count=80//这里的 count与bs组合起来表示制作80M的镜像,具体可以根据实际链接库总的大小来设置count

mkfs.ext2 -F cv_lib.img

chmod go+w cv_lib.img

mount cv_lib.img -o loop /mnt

cp /opt/zedboard/opencv_zed/opencv-3.1.0/install/* /mnt

chmod go-w cv_lib.img

umount /mnt

我们会发现多出一个cv_lib.img文件,这是需要拷贝到zedboard上的库文件。



测试代码我们采用陆佳华书上的edge_detection.cpp进行交叉编译:输入

arm-xilinx-linux-gnueabi-g++  -I /opt/zedboard/opencv_zed/opencv-3.1.0/install/include  -I/opt/zedboard/opencv_zed/opencv-3.1.0/install/include/opencv -L/opt/zedboard/opencv_zed/opencv-3.1.0/install/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann ./edge_detection.cpp -o ./edge_detection.o


最后我们将 edge_detection.o、 cv_lib.img 、lena.bmp拷贝到sd卡或者u盘里,然后开始测试。


使用U盘启动

启动好zedboard后,cd /dev ;ls 下, 看dev文件里是否多出sda,sda(1,2,3,4)设备文件。 下面将u盘进行挂载

mount /dev/sda(1,2,3,4)  /mnt

cd /usr

mkdir lib

再将库文件挂载到/usr/lib下,  mount  /mnt/cv_lib.img /usr/lib

查看 /usr/lib 是否多出一些库, 如没有,多试几次上面的命令

下面开始执行,进入到/mnt目录下:

./edge_detection.o lena.bmp lena_edge.bmp

如果出现successful 就说明编译成功,边缘图像生成。

参考资料:

http://blog.csdn.net/sanwandoujiang/article/details/39338725

这里有一种使用SD卡启动的示例:

http://blog.chinaaet.com/Esion/p/44410


你可能感兴趣的:(Video,image,processing)