zedboard的opencv移植与测试
0赞移植opencv需要在交叉编译环境已经搭建好的基础下进行。楼主虚拟机里使用的是ubuntu14.10,以下操作建议使用root权限(普通用户切换到root使用命令sudo su)。
一、移植opencv
1、下载安装cmake:apt-get install cmake cmake-curses-gui
2、下载opencv的源码包,我的是opencv-2.4.10.zip
3、解压源码包:先在/home/esion/zed自己目录下建立一个opencv解压目录
cd /home/esion/zed mkdir opencv-2.4.10
然后解压:
unzip opencv-2.4.10.zip -d ./opencv-2.4.10
在/home/esion/zed/opencv-2.4.10下就有opencv-2.4.10文件夹,cd进入opencv-2.4.10,新建一个build和一个install文件夹,并且新建一个toolchain.cmake文件(可以使用gedit 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=/home/esion/zed/opencv-2.4.10/opencv-2.4.10/install ../
(CMAKE_INSTALL_PREFIX是指定opencv安装目录)
注意:
1. cmake的配置过程会修改OpenCV源码中的内容,因此如果配置失败的话请从解压源码开始从头来过.
2. 配置过程开始之后会出现一堆的配置信息,如果出现问题请仔细参考配置信息.
接着输入
ccmake ./
进入配置,配置的内容是所有的以WITH开头的选项全部选成OFF(使用回车键选择OFF或ON),(除了WITH_V4L 选为ON)因为这些需要第三方库支持的,要是选择这些的话就需要安装第三方库了。
选择完成后,按c配置,完成后按按g生成并保存。
配置完成后,就输入
make开始编译(这一步要等比较久),编译完成后输入
make install安装完成后在install的文件夹里生成四个目录:bin,lib,include,share。其中lib就是所需的运行库。将lib里的文件放到zedboard板子文件系统的/usr/lib下即可。而如果使用ramdisk文件系统,则需要在将链接库重新压缩出一个镜像文件。
4、制作opencv镜像文件
镜像文件名为opencv_lib.img,大小为80M:
cd /home/esion/zed dd if=/dev/zero of=opencv_lib.img bs=1M count=80
mkfs.ext2 -F opencv_lib.img chmod go+w opencv_lib.img mount opencv_lib.img -o loop /mnt将ubuntu相应的文件拷贝到opencv库中:
cp /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/usr/lib/libstdc++.so* /home/esion/zed/opencv-2.4.10/opencv-2.4.10/install/lib然后将全部opencv库拷贝到opencv_lib.img挂载目录下:
cp -rf /home/esion/zed/opencv-2.4.10/opencv-2.4.10/install/lib/* /mnt然后输入:
chmod go-w opencv_lib.img umount /mnt得到opencv_lib.img,将板子自带的4G的SD卡格式化成fat32格式,将opencv_lib.img和官网的OOB文件全部拷到SD卡中,将zedboard板跳帽设置成从SD卡启动,上电后挂载SD卡:在超级终端中输入
fdisk -l可知SD卡为 /dev/mmcblk0p1,然后挂载:
mount /dev/mmcblk0p1 /mnt/SD卡挂载完成后,进入/mnt可看到SD卡里面的文件,将opencv_lib.img挂载到/usr/lib(板子如果没有lib可建立该目录)
mount /mnt/opencv_lib.img /usr/lib至此,opencv的移植就完成了,下面进行边缘检测的测试。
二、测试
将edge_detection.cpp拷到ubuntu的一个目录下,如/home/esion/zed。在使用交叉编译时需要使用-I -L参数来指定链接库所在的位置:
arm-xilinx-linux-gnueabi-g++ -I /home/esion/zed/opencv-2.4.10/opencv-2.4.10/install/include -I/home/esion/zed/opencv-2.4.10/opencv-2.4.10/install/include/opencv -L/home/esion/zed/opencv-2.4.10/opencv-2.4.10/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这样就交叉编译得到zedboard可执行文件edge_detection.o,然后将edge_detection.o和lena.bmp(使用jpg格式会出错)一起拷贝到SD卡中。在超级终端中进入SD卡挂载的目录/mnt,然后执行
./edge_detection.o ./lena.bmp ./lena_edge.bmp
即可得到边缘检测后的图片lena_edge.bmp,最后将lena_edge.bmp拷贝到电脑上看效果。
附件:(包含edge_detection.cpp和lena.bmp)
