基于嵌入式系统的视频图像捕获研究与实现

发布者:翅膀小鹰最新更新时间:2013-04-06 来源: dzsc关键字:嵌入式系统  视频图像  ARM2410 手机看文章 扫描二维码
随时随地手机看文章
      1 嵌入式系统简介 

      嵌入式系统(Embedded System)是指以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。根据IEEE(国际电气和电子工程师协会)的定义,嵌入式系统是“控制、监视或者辅助设备、机器和车间运行的装置”,这个定义主要是从应用的角度进行定义的。嵌入式系统的操作系统和功能软件集成于计算机硬件系统之中,也就是软件与硬件的一体化。嵌入式系统目的性或针对性很强,一般要求较高的实时性、稳定性。

      2 嵌入式Linux操作系统

      嵌入式Linux是Linux操作系统的一个分支。主要是对通常的Linux进行裁减。最关键的是要进行实时化处理。在实时性要求不是太高的环境下采用Linux具有很多优势。使用嵌入式Linux技术开发嵌入式设备的最大方便是使开发工作从硬件与汇编程序转移到应用软件上来。嵌入式Linux系统架构包括三层:应用程序、系统共享库和Linux内核。现有各种开源的Linux版本,包括支持没有内存管理单元的CPU的uCLinux、实时性非常好的RTAI、QLinux等。本文所采用的开发的系统是进行图像的实时捕获。由于实时性要求不高,同时考虑到Linux下使用V4L开发视频程序具有很大的优越性,所以采用嵌入式Linux作为开发环境。芯片主要采用三星公司生产的ARM2410, 开发板采用北京博创公司的板卡。

      3  采用V4L进行数据采集

      3.1 采用V4L进行图像数据采集

      V4L是Linux下提供的一套设备驱动程序文件API,用于开发视频(Video)、音频(Audio)等领域的应用程序。由于在Linux下设备都作为一个文件进行处理。所以可以通过打开相应的设备文件来获取设备的信息。由于本文是进行视频程序的开发,所以仅讲述有关视频相关的部分。

      视频设备文件一般情况下在/dev/videox。其中x可以为0~63之间的整数。一般情况下为/deev/ video0。当在开发板上通过USB接口将摄像头接入后。在程序中对文件video0进行读的操作就是对摄像头的操作。

      在使用V4L之前首先需要将头文件videodev.h引入,如。相应的API文档在/usr/ src/linux-2.4/Documentation/video4linux/API.html下。同时在为了同相关的设备进行通信,需要一些结构体、变量和函数,所以需要包含其他的相关文件。如等。摄像头、V4L、设备驱动程序、嵌入式Linux操作系统的关系用图1表示如下。


图1

      具体的图像数据的捕获过程为:打开设备文件、查询和确认设备性能、设置捕获的图像的宽和高、设置色深、建立内存映射(后文阐述)、读取图像数据、关闭设备。

      具体的这个过程由于篇幅关系本文将不做具体阐述,读者可以查阅本文的参考文献3。在上述的过程中主要考虑的问题是内存的映射问题。为了读取数据首先需要将显示设备的地址映射到系统地址上来,这需要调用函数mmap()。该函数返回的地址就是存放图像数据的地址。每一帧图像都偏移固定的长度。而摄像头取得图像会包含若干帧。这样通过周而复始的进行就可以将图像数据捕获下来。具体过程和涉及到的函数如下所示:

      打开设备文件: int  device = open (/dev/v4l/video0, O_RDWR);
 
      内存映射:char* memoryMap = (char*)mmap (0, memoryBuffer.size, PROT_READ

      PROT_WRITE, MAP_SHARED, device, 0);
 
      图像数据memoryMap + memoryBuffer.offsets[bufferIndex]
 


图2[page]

      3.2图像格式的转换。

      通过上文所述取得图像数据后,实际就是一块地址。这时就可以进行各种图像处理或图像识别。问题的关键是图像数据是如何放置的。一般情况下,在计算机中一个像素点是由R、G、B三种颜色表示的。当然还存在其它的模式如PAL等。但大多数为RGB模式。即使是RGB模式也存在很多种情况,如每一个像素由8个bit组成,这时R、G、B三种颜色的位数分别3、3、2。如果每一个像素由12个bit组成,则R、G、B三种颜色的位数分别4、4、4。如果每一个像素由16个bit组成,则R、G、B三种颜色的位数存在两种情况分别5、5、5,最高位舍弃,另一种情况为5、6、5。最容易处理、同时也是最常见的是24个bit组成的,这时R、G、B三种颜色的位数分别8、8、8。

      在各种图像处理的程序中往往需要在两种格式之间转换。由于在笔者所采用的设备中,采集到的图像为24位,而显示设备为12位,这就需要在两种格式之间转换。至于怎样将图像数据显示到屏幕上在后文中阐述,下面将主要阐述如何在24位和12位之间转换。整个过程如图3所示。


图3

      首先需要明确计算机中处理的数据是8位为基本单位的。所以,一个像素12位的图象格式可以通过两个像素24位为基本单位进行描述。其次,应该明确的是在从8位数据到4位数据的转换中取得8位数据中的高4位,frame[index*3]&0xF0);然后再取得下一个8位的高4位;左移4位和前面的数据取并,frame[index*3]&0xF0)|((frame[index*3+1]&0xF0)>>4。实现的代码如下:

*(fbp) = (frame[index*3]&0xF0)|((frame[index*3+1]&0xF0)>>4);

                     *(fbp +1) = (frame[index*3+2]&0xF0)|(frame[(index+1)*3]&0xF0>>4);

            *(fbp+2) = (frame[(index+1)*3+1]&0xF0)|(frame[(index+1)*3+2]&0xF0>>4);

      在这段代码中*(fbp)、*(fbp +1)、*(fbp+2)这三个8位实际上两个像素的图像数据。这就实现了24位的图像数据到12位的图像数据的转换。

      4 应用framebuffer进行图像的显示

      为了将程序中图像数据显示在设备的液晶屏幕上,需要读出现实设备的地址并将其映射到系统内存空间上,然后再将图像数据写到映射后的地址空间上。

      首先需要计算出屏幕内存空间的字节数,计算公式为: 

      屏幕内存空间的字节数=像素的个数╳每个像素占用的字节

      其中像素的个数是行和列的乘积,而行和列的数值以及每个像素占用的字节数值可以通过函数ioctl()取得或设置。下述代码为打开framebuffer,读取屏幕的可设置信息,并计算屏幕内存空间的字节数的过程。

struct fb_var_screeninfo vinfo;

int FraBuf= open(/dev/0, O_RDWR);

ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo);

long int screensize = vinfo.xres * vinfo.yres* vinfo.bits_per_pixel;

取得屏幕的大小后,将打开的设备FraBuf得到的内存空间映射到系统中,如下所示,

char *fbp fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED,fbfd, 0);

      然后将前文得到的数据赋值即可。上面的函数的具体意义,读者可以参看相关技术文档,限于篇幅本文没有阐述。这个过程和前文所述的捕获过程是相反的过程。

      5 简单字符的屏幕显示技术

      在数字图像处理过程中,为了将处理后结果或数字显示出来,可以在屏幕上开个区域进行显示。如若字体较多需要字库,如果仅仅是简单的数字可以采用像素描绘的方法。本文作者就是采用后者输出了数字。如数字“1”的描绘程序如下:

x=160;

for ( y = 210; y < 230; y++ ) {

location = (x+vinfo.xoffset) * (vinfo.bits_per_pixel/8) +y+vinfo.yoffset) * finfo.line_length;

     *(fbp + location) = 10;

     *(fbp + location + 1) =10;

     *(fbp + location + 2) =10;

      }

      其中x、y为屏幕的位置,而fbp就是前文打开的设备。

      6 结束语

      本文采用的设备是基于SAMSUNG公司的ARM9芯片S3C2410,由于篇幅的限制本文没有具体阐述整个系统,集中阐述了视频图像数据的捕获和显示,在这一过程中存在许多细节问题,限于篇幅没有阐述。

参考文献:

[1]. frame datasheet http://www.dzsc.com/datasheet/frame_2528858.html.
[2]. fbp datasheet http://www.dzsc.com/datasheet/fbp_1115675.html.

关键字:嵌入式系统  视频图像  ARM2410 引用地址:基于嵌入式系统的视频图像捕获研究与实现

上一篇:基于2.6.19内核的小型Linux系统制作移植
下一篇:WT6104CLVG在无线通信系统中的应用

推荐阅读最新更新时间:2024-03-16 13:21

ARM嵌入式系统硬件设计及应用实例详解
  随着计算机技术、微电子技术和网络技术的迅速发展,嵌入式系统在工农业等诸多领域得到了广泛的应用。本文主要详细介绍ARM嵌入式系统硬件设计及ARM嵌入式系统的应用实例,具体的跟随小编一起来了解一下。   ARM嵌入式系统硬件设计   图1是系统硬件结构图“系统采用外部3.6864MHz的晶振产生内核所需要的18.432MHz、36.864MHz、49.152MHz或73.728MHz的时钟。      以下主要针对此硬件开发平台,进行结构、储存器扩展、主要接口、显示及其外设方面设计的介绍。   1、电源部分设计   电源是系统可靠工作的保证,包括供电和复位电路部分。系统复位模块提供CS89712启动信号。系统采用nPOR
[单片机]
ARM<font color='red'>嵌入式系统</font>硬件设计及应用实例详解
解析视频监控系统图像处理关键技术
  视频监控就是通过摄像机观测被监视场景中的运动目标,查看、分析、描述、记录其行为,以满足安全防范、远程管理和实时交流的需要。视频监控系统是多媒体、计算机网络和人工智能等技术的综合运用,在视频监控系统中进行图像处理,目的是提高图像视感质量,适应传输网络状况,提取图像的特征或信息,其核心问题是实现以更小的传输带宽承载更高质量的视频,减少运算资源消耗,实现对视频内容的主动感知,对海量视频数据的快速查找、精确定位和灵活呈现,涉及的主要技术包括:视频编解码、视频传输与存储、移动视频技术、视频分析、视频检索等,以下将进行简要介绍。 视频编解码   目前提高视频编码效率的方法可分为两大类:一是在传统的编码框架内继续提高各模块的编码效率,这
[安防电子]
基于嵌入式系统视频图像捕获研究与实现
1 嵌入式系统简介 嵌入式系统(Embedded System)是指以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。根据IEEE(国际电气和电子工程师协会)的定义,嵌入式系统是“控制、监视或者辅助设备、机器和车间运行的装置”,这个定义主要是从应用的角度进行定义的。嵌入式系统的操作系统和功能软件集成于计算机硬件系统之中,也就是软件与硬件的一体化。嵌入式系统目的性或针对性很强,一般要求较高的实时性、稳定性。 2 嵌入式Linux操作系统 嵌入式Linux是Linux操作系统的一个分支。主要是对通常的Linux进行裁减。最关键的是要进行
[单片机]
基于<font color='red'>嵌入式系统</font>的<font color='red'>视频</font><font color='red'>图像</font>捕获研究与实现
世强元件电商深圳国际嵌入式系统展 带全面的测试测量仪器
近日,世强元件电商携汽车、工业、物联网、测试测量等领域的最新元件产品及解决方案亮相第六届深圳国际嵌入式系统展在深圳会展中心隆重开展,据悉,该展会作为嵌入式领域最大盛会,吸引了嵌入式产业链优秀厂商积极参与。其中,世强元件电商表现亮眼。在测试测量领域,世强元件电商带来了包含低功耗测量、无线测试、频谱分析、直流电源分析等全面的测试测量仪器解决方案。 在低功耗测量方面,世强元件电商带来了低功耗测量的利器直流电源分析仪,业界领先的nA级直流电源分析仪N6705C。在N6705+N6781A的SUM模块上,采用了一项全新技术,那就是高动态范围的电流测量技术——无缝量程切换技术。广泛应用在目前最热的智能手机及其部件、元器件的动态精密耗电分析
[测试测量]
世强元件电商深圳国际<font color='red'>嵌入式系统</font>展 带全面的测试测量仪器
嵌入式系统学习笔记(6)——MCS51汇编语言程序设计
有汇编程序和反汇编程序,可以由机器语言得到汇编语言 不是所有都会默认从0000H开始,保险起见,还是要在开头用ORG 0000H,然后加一条跳转指令到程序存放起始地址 交叉汇编,在一台电脑上汇编,在另一台电脑上运行 注意,除了51单片机之外,其它单片机上电后PC值并不一定是0000H,所以需要根据实际情况放第一条指令的位置。此外,0003H到0023H是中断入口,所以第一条指令只能是0000H到0002H一共三个字节,LJMP指令恰好就是3个字节。跳转后的两个NOP是为了等外接芯片复位,因为外接芯片可能复位比51的CPU慢,这段时
[单片机]
<font color='red'>嵌入式系统</font>学习笔记(6)——MCS51汇编语言程序设计
嵌入式系统架构:CISC家族之VIA架构
  目前仍存活的X86处理器厂商,除了身为世界第一大半导体厂的Intel以外,其余两家都活的相当辛苦,尤其以台湾的VIA(威盛)为最,该公司在处理器产品线的经营上,向来遭受大厂的打压,    VIA过去所推出的一系列低功耗处理器,虽然效能偏低,但是其功耗控制能力非常优秀,远远超过Intel以及AMD这两家CPU大厂,如今世界潮流逐渐从效能取向走往绿色环保取向,VIA终于也是媳妇熬成婆,除了在一般低价PC获得满堂彩以外,在UMPC以及嵌入式系统方面,也都能提供相当优秀的解决方案。    VIA 的主流产品线为C7-M处理器,该款处理器共分两个型号——普通版本及Ultra Low Voltage版本,C7-M普通版本型号拥有1.5
[嵌入式]
构建RTW下的嵌入式系统开发环境
一般单片机应用系统的产品开发采用的是自下而上的过程,即根据应用的需求,选择相应的从器件进行系统的硬件设计、制作、调试到软件功能实现函数。在系统设计过程中,开发人员首先必须对特定硬件有较深入的了解,再总结出可以使用的方案。这种开发流程最大的弊端是,软件设计过程对硬件的依赖性很强,软件设计受到特定硬件平台的限制,而利用MATLAB/SIMULINK/RTW,可以完成一种基于模型的自上而下的开发流程。这种开发流程先搭建好整个系统的模型,可以直接设计算法,并且在SIMULINK中完成仿真过程。当仿真结构达到设计要求时,再通过RTW自动生成C代码,由嵌入式交叉编译工具生成在目标机上运行的应用程序,可缩短产品的研发周期,降低产品的研发成本
[单片机]
构建RTW下的<font color='red'>嵌入式系统</font>开发环境
嵌入式系统常规电源设计
  图:典型便携嵌入式系统的电源管理方案。 对于电池供电的便携设备而言,除了需要突破处理能力的限制外,便携式系统电源的性能也需要不断改进。本文探讨便携嵌入式系统电源设计的注意事项以及设计中应遵循的准则。这些原则对任何具有强大功能且必须以电池供电的便携嵌入式系统电源设计都是有帮助的。根据本文描述的构造模块,读者可以为特定设计选择合适的器件以及设计策略。 电源管理单元 为电源电路规定具体的功能和架构模块并非微不足道,这些工作直接影响到电池供电系统的工作时间。电源系统架构会因嵌入式产品和应用领域的不同而各异。 下面我们分别定义图中每个组成部分的要求。假设该产品由电池组或外接电源供电。电源路径控制器的功能是当有多个
[电源管理]
<font color='red'>嵌入式系统</font>常规电源设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved