电子产业一站式赋能平台

PCB联盟网

搜索
查看: 1941|回复: 0
收起左侧

杭州嵌入式linux培训_嵌入式系统视频图像捕获研究

[复制链接]

2607

主题

2607

帖子

7472

积分

高级会员

Rank: 5Rank: 5

积分
7472
发表于 2020-7-28 14:41:47 | 显示全部楼层 |阅读模式
杭州嵌入式linux培训_嵌入式系统视频图像捕获研究,   

   

本文论述了嵌入式系统相关理论、嵌入式Linux的基本概念,主要阐述了采用嵌入式Linux进行视频图像数据的捕获、存储、显示等。采用的关键技术包括 V4L、framebuffer、数字图像格式变换等,提出了图像数据格式的变换方法。同时阐述了具体的实现方法。

        1 嵌入式系统简介

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

       2  嵌入式Linux操作系统

       嵌入式Linux是Linux操作系统的一个分支。主要是对通常的Linux进行裁减。最关键的是要进行实时化处理。在实时性要求不是太高的环境下采用Linux具有很多优势。使用嵌入式Linux技术开发嵌入式设备的最大方便是使开发工作从硬件与汇编程序转移到应用软件上来。[2]嵌入式Linux系统架构包括三层:应用程序、系统共享库和Linux内核。现有各种开源的Linux版本,包括支持没有内存管理单元的CPU的uCLinux、实时性非常好的RTAI、QLinux等。[3]本文所采用的开发的系统是进行图像的实时捕获。由于实时性要求不高,同时考虑到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引入,如<linux/videodev.h>。相应的API文档在/usr /src/linux-2.4/DocumentaTIon/video4linux/API.html下。同时在为了同相关的设备进行通信,需要一些结构体、变量和函数,所以需要包含其他的相关文件。如<sys/types.h>、

       <sys/stat.h>、 <sys/ioctl.h>、 <sys/mman.h>、 <linux/videodev.h>、 <fcntl.h>、 <unistd.h>等。摄像头、V4L、设备驱动程序、嵌入式Linux操作系统的关系用图1表示如下。嵌入式系统基础教案, 半嵌入式台盆6, 嵌入式视觉的系统, 嵌入式小区融合, 嵌入式设计软件, 嵌入式linux下载, 嵌入式相关培训, 嵌入式方向证书, 嵌入式系统的应用前景, 嵌入式智能设备, 嵌入式人脸考勤, 锈钢板嵌入式景墙, 嵌入式系统四个阶段, 嵌入式培训难度知乎, 嵌入式裸装轴承, 嵌入式技术很难学?, 嵌入式电视边框, 嵌入式关闭摄像头, 嵌入式轴承盖o型圈, 嵌入式住宅什么意思, 组播嵌入式rp,

         

  

                                        图1

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

         具体的这个过程由于篇幅关系本文将不做具体阐述,读者可以查阅本文的参考文献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
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表