新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于Linux的嵌入式视觉系统设计方案

基于Linux的嵌入式视觉系统设计方案

作者:时间:2012-10-18来源:网络收藏

内存映射:char* memoryMap = (char*)mmap (0,memoryBuffer.size, PROT_READ PROT_WRITE,MAP_SHARED, device, 0);

图像数据: memoryMap + memory Buffer.offsets[bufferIndex]

4.2 图像显示程序

采用直接将数据写入FrameBuffer 中来显示图像。FrameBuffer 设备是运行在 控制台上的一个优秀的图形接口,几乎支持所有硬件,提供了统一的API 接口,很好地实现了硬件无关性。FrameBuffer的设备节点是/dev/fb* , 在编译内核时选中FrameBuffer.LCD 显示程序流程图如图4 所示:

图4 图像显示程序流程图

图4 图像显示程序流程图

应用程序编写完之后,用交叉编译环境对这个文件进行编译,没有错误后可生成cam 可执行文件。然后把cam 拷贝到根目录下的bin 文件夹,在主机windows 超级终端下输入命令:

#ln -s /dev/v4l/video0 /dev/video0

# cam 640 480 16 video0

就可以在屏幕上看到采集的图像了。样机如图5 所示。

图5 嵌入式视觉系统样机。

图5 系统样机。

5 系统性能测试

S3C2410 控制板的I/O 口资源有限,因此,对图像采集的控制信号线采用普通I/O 口,而不是用中断I/O 口与其摄像头模块相连,因此只能用软件实时检测I/O 的电平状态,决定何时采集开始,何时读数据,何时结束。为了采集到图像数据并能分辨出来,必须能够跟踪控制信号的变化状态。

由于I/O 口的电平的变化频率远低于摄像头控制信号的变化频率,如果不对摄像头模块进行降频处理,这将导致I/O 口无法跟踪控制信号变化,即将无法判断帧、行、点何时开始与结束等状态信息。当摄像头的最高频率(点象素频率最高)降到1MHZ 左右,系统就能跟踪并完整的采集到图像信息,进一步处理之后完好的显示出来。图6 是示波器对帧、行、点信号及Y0 信号的波形图。

图6 信号波形图。

图6 信号波形图。

从上图可以看出,系统的控制信号非常完整和稳定,没有出现毛刺、变形等情况,给检测读取带来了好处。Y0 的波形图有些段是低电平,出现的位置不一样,是因为摄像头移动时,环境光发生了变化,引起整个Y 数据变化。

表1 采集到的实验数据(示波器采用x10 档)。

表1 采集到的实验数据(示波器采用x10 档)。

把示波器调整到x10 档,在不同情况下,多次采集YSYN 信号、HREF 信号、PCLK 信号的峰-峰值、平均值、周期、频率等数据,从Y0~Y7 中选择Y0信号进行观察。从数据中可以看出各信号的峰-峰值变化幅度不大,尤其是信号的频率比较稳定。Y0 数据信号很规整,那么其他数据信号如Y1~Y7 也是如此。

多次实验数据如下表1 所示。

测试硬件性能稳定之后,在 系统下把图像采集、图像显示和保存图像命令写成一个脚本,放在文件系统etc/init.d 目录下。重新把文件系统下载到开发板里,当开机启动后,系统会自动执行图像采集、显示和保存。

6 结论

本文主要S3C2410 开发板和 操作系统视觉系统。该视觉系统不仅可以较好地实现图像采集和显示,还可实现图像存储、网络获取图像等功能,并且可以在该基础上研究图像处理等算法。与PC 组合的视觉系统相比,结构简单,体积和重量减小,功耗低,可移植性强、功能扩展方便,成本显著降低,所以对这种嵌入式视觉系统研究具有相当重要的实用价值。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭