Zedboard学习(八):zedboard移植opencv
准备工作
- opencv源码包下载:http://pan.baidu.com/s/1qXTKIdQ(opencv-2.4.9),后面我们要在虚拟机中编译;
- 搭建好zedboard在Linux下的交叉编译环境,以前的博客有介绍(Zedboard学习(二):zedboard的Linux下交叉编译环境搭建)。
- zedboard官方SD卡启动文件,把这些文件放到sd卡中即可。
由于zedboard上运行的是嵌入式linux,处理器是arm9,与pc的不同,代码必须要经过交叉编译工具编译后才可以执行。
注意:官方给出的这个版本是不带图形界面的,桌面版本的Linux我们可以自己使用虚拟机制作。(Zedboard学习(一):移植Ubuntu桌面操作系统)
移植
首先要说明的是,往zedboard上移植opencv跟我们平时在pc上安装opencv的过程不同。毕竟zedboard是嵌入式平台很多东西都要删减,而且zedboard官方移植的linux不带图形界面,我们要自己在命令行下配置环境。
为了防止权限冲突,建议在root权限下操作,不在root权限下可能会报错。
1、先新建一个文件夹,存放所有文件:
mkdir opencv_zed
cd opencv_zed
2、下载的源码是opencv2.4.9.tar.gz,将其从windows下拷贝到虚拟机中(Ubuntu14.04下FTP服务器的搭建配置):
拷贝到之前建立的opencv_zed目录中,输入指令:
tar -zxvf opencv-2.4.9.tar.gz
3、在opencv-2.4.9
中新建install
和build
文件夹,并创建toolchain.cmake
文件。
cd opencv-2.4.9/
mkdir build
mkdir install
touch toolchain.cmake
gedit toolchain.cmake
复制如下内容到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++)
这类指定了cmake的处理器信息还有交叉编译工具等。
4、进入build文件夹,关联toolchain.cmake
并配置OpenCV的安装目录:
cmake -D CMAKE_TOOLCHAIN_FILE=toolchain.cmake -D CMAKE_INSTALL_PREFIX=/home/xhb/Study/OpenCV/opencv_zed/opencv-2.4.9/install ../
CMAKE_INSTALL_PREFIX为安装目录,这个要根据自己的目录的路径更改。
5、生成Makefile文件。
如果没有安装要先安装cmake-curses-gui:
sudo apt-get install cmake-curses-gui
输入指令,配置cmake:
ccmake ./
配置时我们只需要把所有with开头的都选为OFF(除了WITH_V4L为ON,这个指的是linux的v4l(video for linux)组件);
c键,是configure,保存配置;q键,退出;操作不做赘述,都有说明。
6、编译安装:
make -j4
make install
最后会在之前建立的install文件夹下生成zedboard上的opencv库。
7、制作opencv镜像:
进入到最初建立的目录下,我们要在这个目录下生成镜像:
cd /home/xhb/Study/OpenCV/opencv_zed
镜像的名字是opencv_lib.img,其大小为80M:
dd if=/dev/zero of=opencv_lib.img bs=1M count=80
将镜像格式化为ext2格式:
mkfs.ext2 -F opencv_lib.img
增加写权限:
chmod go+w opencv_lib.img
挂载这个镜像,需要使用管理员权限:
sudo mount opencv_lib.img -o loop /mnt
拷贝编译生成的opencv库到挂载的镜像中,路径要根据自己的来修改:
sudo cp -rf /home/xhb/Study/OpenCV/opencv_zed/opencv-2.4.9/install/* /mnt
去掉写权限:
sudo chmod go-w opencv_lib.img
取消挂载:
sudo umount /mnt
这个镜像文件已经制作好了,后面直接使用。
8、编写测试程序并编译:
测试源码为edge_detection.cpp:
#include "cv.h"
#include "highgui.h"IplImage* doCanny(IplImage* in,double lowThresh,double highThresh,double aperture)
{if (in->nChannels != 1)return 0; // Canny only handles gray scale imagesIplImage* out = cvCreateImage( cvGetSize( in ),in->depth, //IPL_DEPTH_8U, 1);cvCanny( in, out, lowThresh, highThresh, aperture );return( out );
};int main( int argc, char** argv )
{if(argc!= 3) printf("arguments error! format origin_image.bmp target_image.bmp\n");IplImage* img_rgb = cvLoadImage( argv[1] );IplImage* img_gry = cvCreateImage( cvSize( img_rgb->width, img_rgb->height ), img_rgb->depth, 1); cvCvtColor(img_rgb, img_gry ,CV_BGR2GRAY);// cvNamedWindow("Example Gray", CV_WINDOW_AUTOSIZE );// cvNamedWindow("Example Canny", CV_WINDOW_AUTOSIZE );// cvShowImage("Example Gray", img_gry );IplImage* img_cny = doCanny( img_gry, 10, 100, 3 );if(cvSaveImage(argv[2], img_cny,0) != 0)printf("Save Image Successful\n");// cvShowImage("Example Canny", img_cny );// cvWaitKey(0);cvReleaseImage( &img_rgb);cvReleaseImage( &img_gry);cvReleaseImage( &img_cny);// cvDestroyWindow("Example Gray");// cvDestroyWindow("Example Canny");return 0;
}
对它进行交叉编译:
arm-xilinx-linux-gnueabi-g++ -I /home/xhb/Study/OpenCV/opencv_zed/opencv-2.4.9/install/include -I /home/xhb/Study/OpenCV/opencv_zed/opencv-2.4.9/install/include/opencv -L /home/xhb/Study/OpenCV/opencv_zed/opencv-2.4.9/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
由于没有配置默认的opencv环境变量,所以我们编译时手动指定了用到的库。
由于只是测试,不做其他配置,那些一大串的路径根据自己的路径更改。
编译后会产生edge_detection.o文件。
现在我们的目录下应该有这几个文件:
9、把edge_detection.o、opencv_lib.img、以及lena.bmp(随便下张图片都行)拷贝到u盘中。
为了方便管理我新建了一个文件夹存放这些文件,只要找得到就行。
10、将官方的sd卡启动文件拷贝到sd卡中,zedboard从sd卡启动。
u盘通过USB转OTG线连接到zedboard上;
从设备管理器中找到串口端口号;
使用putty连接zedboard,串口波特率是115200;
启动zedboard,等待一下,命令行出现:
输入指令:
fdisk -l
我们从中可以看到有两个设备,3980MB的是我们的sd卡,1967MB的就是U盘了。
下面可以找到它的设备号为/dev/sda4。
挂载u盘:
mount /dev/sda4 /mnt
先找到我们存放镜像的目录:
把生成的opencv镜像文件挂载到/usr/lib文件夹中:
cd /usr
mkdir lib
mount /mnt/zed_opencv_test/opencv_lib.img /usr/lib
运行可执行文件,读入lena.bmp,进行边缘检测,输出到out.bmp。
./edge_detection.o lena.bmp out.bmp
运行成功。
由于没有图形界面,我们把u盘拔出,到电脑里看下out.bmp。
移植成功!
Zedboard学习(八):zedboard移植opencv相关推荐
- OpenCV与图像处理学习八——图像边缘提取(Canny检测代码)
OpenCV与图像处理学习八--图像边缘提取(Canny检测代码) 一.图像梯度 1.1 梯度 1.2 图像梯度 二.梯度图与梯度算子 2.1模板卷积 2.2 梯度图 2.3 梯度算子 2.3.1 R ...
- freeRtos学习笔记 (9) 移植和CPU利用率统计
freeRtos学习笔记 (9) 移植和CPU利用率统计 使用官方固件移植 首先准备一个能跑的裸机工程 注意,freertos需要使用systick定时器,而stm32HAL库默认使用systick作 ...
- opencv 全志_移植opencv人脸识别到全志A10开发板上 +linux3.0内核
移植opencv人脸识别 libz: zlib-1.2.3 libjpeg: jpegsrc.v6b libpng: libpng-1.2.18 libyasm: yasm-0.7. ...
- 方差 标准差_方差与标准差——杭州市初中数学核心组寒假微课学习八年级第38课...
国家正值非常时期,开学已经推迟,为响应"在推迟开学时段,指导各地各校充分利用'互联网+'的模式共享优质教育资源,开展远程教育教学活动和学生课业辅导,努力实现我市广大中小学校学'停课不停学', ...
- PyTorch框架学习八——PyTorch数据读取机制(简述)
PyTorch框架学习八--PyTorch数据读取机制(简述) 一.数据 二.DataLoader与Dataset 1.torch.utils.data.DataLoader 2.torch.util ...
- JMS学习八(ActiveMQ消息持久化)
JMS学习八(ActiveMQ消息持久化) ActiveMQ的消息持久化机制有JDBC,AMQ,KahaDB和LevelDB,还有一种内存存储的方式,由于内存不属于持久化范畴,而且如果使用内存队列,可 ...
- 推荐系统遇上深度学习(八十七)-[阿里]基于搜索的用户终身行为序列建模
本文介绍的论文是<Search-based User Interest Modeling with Lifelong Sequential Behavior Data for Click-Thr ...
- 移植Opencv到arm tq2440
移植opencv到tq2440一.下载opencv及cmake 1,download opencv_2.3.1 OpenCV-2.3.1a.tar.bz2 下载链接:http://opencv.org ...
- [Java并发包学习八]深度剖析ConcurrentHashMap
转载----http://qifuguang.me/2015/09/10/[Java并发包学习八]深度剖析ConcurrentHashMap/ HashMap是非线程安全的,并发情况下使用,可能会导致 ...
最新文章
- 10.17 配置IP,网络问题排查
- [yc]详解link
- menu什么意思中文意思_vigorous什么意思
- mysql 语句性能分析_mysql的sql语句的性能诊断分析
- 什么是SPDK,以及什么场景需要它
- 【Lucene4.8教程之三】搜索
- Repeater在无数据记录时显示“无相关记录...”
- POJ-1050 To the Max 二维最大子段和
- 20190530本科教学PPT 文本挖掘的两种基本方法(TF-IDF和LDA)
- django连接MySQL报错Did you install mysqlclient?
- PHP execl导出/展示
- php中常见的错误类型有,JavaScript编程中会出现的错误类型有哪些?错误类型介绍...
- Atitit 提升开发效率 声明式编程范式 目录 1. 声明式编程体系树	1 1.1. 声明式(对比:指令式,,主要包括 函数式,逻辑式编程)	2 1.2. 声明式编程:表达与运行分离	3 1.3
- java如何生成jar包
- CreatePipe()函数
- 【限流算法】java实现滑动时间窗口算法
- 编译时的chenk api
- 用户计算机MAC地址在哪看,电脑mac地址查询_mac地址怎么查-太平洋IT百科
- 11万多职场文章技巧ACCESS数据库
- PHP气缸种类,【汽缸】【气缸】|× 【Q】√ - 校对标准:寻找权威依据 - Powered by phpwind...
热门文章
- 一篇超级详细的jsp+servlet+jdbc+mysql检验登录操作(IntelliJ IDEA)
- 完美的素数_JAVA
- sublime :[Decode error - output not utf-8]
- 【Linux】5.linux下的export命令和环境变量
- 【深度学习】全连接层的作用
- 必须知道的 Visual Studio 快捷键
- Spring AOP中定义切点(PointCut)和通知(Advice)
- JAVA访问控制符(写给初学者的)
- 程序员面试题精选100题(56)-C/C++/C#面试题(4)
- Day 2: AngularJS —— 对AngularJS的初步认识