基于ARM的嵌入式USB图像采集与显示
3 基于Qt/Embedded 图像显示程序的编写
基于嵌入式Linux 常见的GUI 系统有MiniGUI、MicroWindows、OpenGUI和基于Framebuffer[5]的Qt/Embedded[4].Qt 是诺基亚开发的一个跨平台的C++ 图形用户界面应用程序框架,它提供给应用程序开发者建立艺术级的图形用户界面所需的功能,并且是完全面向对象的,很容易扩展,允许真正的组件编程。正是基于以上优点,本文采用Qt/Embedded 开发平台,并将基于Qt 的图形界面Qtopia 移入我们的文件系统中。
为了避免由于图像数据量大而在目标板上显示闪烁的问题,本文采用双缓冲技术实现采集图像显示,采用的是QPixmap 对象。QPixmap 是Qt 为图像处理提供的类,主要用于图像的绘制。实现双缓冲时,先把要显示的内容绘制在这个QPixmap pixmap 对象上,然后再用一步操作把pixmap 绘制在屏幕上。基于Qt 图像显示及辅助框线绘制的部分代码段如下:
QPixmap pix (width (),height ());// 定义一个QPixmap 用于在上面绘制图像及框线
QPainter p(&pix);// 定义绘制工具
QPainterQPen pen (yellow,3,DotLine);// 定义一个画笔的属性,如颜色、粗细、线条样式
p.drawImage (0,0,img);// 把摄像头采集到的图像绘制到QPixmap 上
p.setPen(pen);// 设置画笔属性
p.moveTo(50,330);// 设置画笔笔尖起始位置
p.lineTo(150,50);// 开始绘制框线
p.lineTo(490,50);
…略
p.end();// 在QPixmap 上的所有绘制任务结束
p.begin(this );// 准备把QPixmap 绘制到屏幕上
p.drawPixmap (0,0,pix);// 绘制QPixmap 到屏幕操作,图像显示到LCD 上图像数据的连续采集和显示是通过定时器实现的,QTimer 类提供了定时器信号和单触发定时器。设置定时启动触发周期,每当定时器时间到就触发一个定时器事件,在事件中调用VIDIOCMCAPTURE 函数完成对图像的采集,并通过QPixmap 类将图像显示到LCD上。至此就可以通过基于Qt 编写的图形界面程序,将USB 摄像头采集的视频图像在LCD 上实时显示。
4 结论
本文基于ARM9 处理器和嵌入式Linux 操作系统,详细介绍了一种USB 摄像头图像采集与显示的通用方法。Linux 代码完全开源,系统具有良好的移植性,可方便地进行各种扩展,采用Qt 进行人机界面的设计能够极大地节省开发成本和周期。本方案经推广可用于工业控制、智能交通、小区监控等领域。
- 基于ARM Linux的图像采集与蓝牙传输(08-03)
- 基于FPGA和ARM的图像采集传输系统(11-05)
- 图像采集压缩SOC系统在FPGA中的实现(11-07)
- 基于嵌入式ARM的图像采集与传输设计(03-03)
- 基于ARM9的CMOS图像采集系统的设计与实现(10-01)
- 基于ARM的除法运算优化策略(01-14)