新闻中心

EEPW首页>嵌入式系统>设计应用> 基于ARM9的转辙机缺口监测图像采集模块设计

基于ARM9的转辙机缺口监测图像采集模块设计

作者: 时间:2012-05-23 来源:网络 收藏

下面简要介绍其实现:
(1)打开视频设备,这里用int v41_open(char*,v41_device*)实现。
(2)获得设备信息的任务,这里用extern int v41_get_capability(v41_device*)实现。函数有vd->capability和vd->picture两个结构体。capability主要包括设备名称、支持的最大最小分辨率、信号源信息等。picture结构包括了亮度,对比度,色深。及两个函数中最主要的语句ioctl。对于ioctl的行为,它是由驱动程序提供和定义的,在这里是由v41所定义,其中宏VIDIOCGCAP和VIDIOCGPICT的分别表示获得视频设备的capability和picture。
运用int v41_get_mbuf(v41_device*vd)函数。通过这个结函数可以获得摄像头可映射的设备存储的内存大小、摄像头可同时存储的帧数、每一帧的偏移量。
(3)按需要更改设备的相应设置,通过int v41_set_picture函数实现。其核心是v41为提供的ioctl相关调用,通过这个函数可以修改如亮度,对比度等相关的值。
(4)获得到的数据,通过extern int v41_grab_picture实现。先使用ioctl(fd,VIDIOCGMBUF,grab_vm)函数获得摄像头存储缓冲区的帧信息,之后修改voideo_mmap中的设置,例如重新设置图像帧的垂直及水平分辨率、彩色显示格式。其中vd->map所指向的数据就是图像数据。
其中的第一帧,使用ioctl(fd,VIDIOCMCAPTURE,grab_buf)函数,若调用成功,则激活设备真正开始一帧图像的截取,是非阻塞的。接着使用ioctl(fd,VIDIOCSYNC,frame)函数判断该帧图像是否截取完毕,成功返回表示截取完毕,之后就可把图像数据写入到Frame Buffer。
然后利用grab_fd.frames值确定完毕摄像头帧缓冲区帧数据进行循环的次数。在循环语句中,也是使用VIDIOCMCCAPTURE? ioctl和VIDIOCSYNC?ioctl函数完成每帧截取,但要给采集到的每帧图像赋地址,利用语句buf=grab_data+grab_vm.offsets[frame],然后保存文件的形式。若要继续采集可再加一个外循环,在外循环语句只要给原来的内循环再赋frame=0即可。通过显示屏把采集到的视频图像显示出来。
(5)关闭设备,int v41_close(v41_device*),主要是关闭设备,取消映射。

5 图像采集效果
将摄像头插入到USB主机下行口,这时在终端上将打印以下信息:
ov511.c:USB OV511+camera found
ov511.c:Camera type(108)not recognized
ov511.c:Please notify mmcclell@bigfoot.com of the name,
ov511.c:manufacturer,model.and this number of your camera.
ov511.C:Also include the output of the detection process.
ov511.c:Sensor iS an OV7620
ov511.c:Device registered on minor 0
进入到本实验程序所在文件夹,运行本实验程序,观察液晶屏的图像效果:
#/videodemo

本文引用地址://m.amcfsurvey.com/article/149020.htm

g.jpg



6 结束语
在ARM-Linux平台上,通过使用Video4Linux的API函数从视频设备中读取图像数据,并对图进行了JPEG格式压缩,再将数据进行显示处理,为后续的转辙机检测的上传功能实现奠定了基础。系统若配合使用可靠的传输技术与先进的上位机图像处理系统,将使转辙机系统得以实现。


上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭