基于嵌入式Linux远程图像监控系统的设计(4)
发布时间:2021-06-07
发布时间:2021-06-07
嵌入式linux网络视频监控项目,非常实用,非常经典,值得学习
的偏移量变量和图像大小变量,并改写libjpeg库相关操作函数,封装相关的数据结构和成员函数为自定义的图像编解码类MYJPEG。实现输入数据和输出数据的重定向到内存,利用开源的libjpeg库在内存中实现图像的压缩和解压缩。参照libjpeg库中编解码过程,实现了类MYJPEG中压缩与解压缩成员函数。
writemem(unsignedchar*char*
mquality);//图像数据压缩处理
readmem(unsignedchar*indata,intpSize,unsignedchar*outdata);//图像数据解压缩处理
outdata,int*pSize,unsigned
indata,unsignedintmwidth,unsignedintmheight,int
压缩函数中参数可以灵活对压缩图像分辨率大小和质量属性进行设置,参数pSize返回压缩后图像的大小。而解压缩图像时,压缩图像的大小则通过参数pSize传入。
3.5网络传输视频图像数据
UDP是非连接的、不可靠的、传递数据报的传输协议,提供了一种高效无连接的服务。由于UDP不提供数据的可靠性保证,使其具有较少的传输时延,很适合实时性高而不要求数据绝对可靠的场合。视频图像数据实时性强,数据量大,所以系统设计采用此协议传输数据。通过Linux下的socket套接字编[7][8 11]程,实现视频图像的网络传输。利用C语言中的多线程编程,将网络通信置于一个工作线程,避免了GUI应用程序因网络阻塞等待操作而使图形用户界面冻结无法响应的问题。系统设计时结合使用互
[12]
斥锁和条件变量对各个工作线程进行同步。嵌入式视频监控终端上采集显示程序作为主线程,同时创建一个视频图像发送工作线程deal_send(),用来处理与视频监控中心PC间的网络通信。具体过程描述如下:调用socket()函数创建一个UDP数据报类型的套接字,接着调用bind()函数,给套接字绑定一个端口。视频图像发送工作线程调用recv from()函数在指定的端口上阻塞等待客户端发送来的UDP数据报,接收到服务请求,处理该服务请求并通过sendto()函数将处理结果返回给PC端。在监控中心PC端创建解码显示视频图像工作线程,并创建一个视频图像接收工作线程deal_re ceive(),用来处理与视频监控终端的网络通信。具体过程描述如下:调用socket()函数创建一个UDP数据报类型的套接字,接着调用bind()函数,给套接字绑定一个端口。调用sendto()函数向监控终端发送服务请求报文,调用recvfrom()函数等待并接收服务应答报文。继续定时发送服务请求直至通信终止。
4图4 网络传输通信流程
4 视频图像实时显示
系统是一个实时视频图像采集与传输系统,采集的现场视频图像在嵌入式视频监控终端和监控中心PC上实时显示与保存。只要以较快速度显示变化的图片就可以实时显示现场情况,系统中利用定时器每40ms采集一帧视频图像。该远程图像监控系统界面是通过QT来实现的,在强大的QT图形库的支持下,
[13 14]
可快速开发出友好的图形用户界面。利用几个相关Qt图形类QImage、QPixmap和QLabe,l实现视频图像的显示和JPEG格式图片保存。
5 结束语
系统设计方案是一种基于嵌入式Linux的图像采集和传输系统,本文详细介绍了V4L2应用编程接口进行USB摄像头视频图像采集,基于QTE图形库实时显示视频图像,利用开源的libjpeg库实现图像的JPEG编解码,通过网络实时传输进行远程监控。整个系统数字化、网络化程度高,实时性好、稳定可靠且图像质量较好。经实验测试,系统很好地实现对现场视频图像的监控。在该系统的基础上,可进一步进行二次扩展开发,以便应用在工业现场控制、远程指挥监控系统、可视电话等诸多领域。
参考文献:
[1] 赵敏,杨恢先,汤安平.基于S3C2440的嵌入式Linux系统
移植的研究与实现[J].电子器件,2008,31(6):1947 1950.[2] 郑灵翔.嵌入式Linux系统设计[M].北京:北京航空航天大学出版社,2008.[3] MichaelHSchimek.VideoforLinuxTwoAPISpecification
[EB/OL]./v4l2spec/v4l2.pd,f2008 03 04.
(下转第38页)
上一篇:2014年石化乙烯行业分析报告
下一篇:主机板维修手册-