APP下载

一种基于OpenCV提高文件拍摄流畅性的方法和系统∗

2017-06-05

计算机与数字工程 2017年5期
关键词:线程队列图像处理

一种基于OpenCV提高文件拍摄流畅性的方法和系统∗

王咸锋

(广东建设职业技术学院建筑信息系广州510440)

针对目前图像视频处理过程中存在渲染速度慢、效率低、CPU损耗大、流畅性不高、很难满足用户体验需求的问题,论文提出了一种基于开源计算机视觉库(Open Source Computer Vision,OpenCV)提高文件拍摄流畅性的方法和系统。将渲染的帧数据和摄像头获取的帧数据的速率进行分离,通过异步渲染的方式将帧处理的逻辑和渲染的逻辑分别运行于两个不同的线程中;然后通过适当的丢帧操作,提高文件拍摄的流畅度。该方法可以降低CPU的使用率,提高图像渲染的速度和效率,从而提升图像视频的流畅性,为用户提供更好的体验。该方法和系统可广泛应用到各领域的图像视频处理中,具有重要的应用价值。

OpenCV;文件拍摄;流畅性;帧处理;异步渲染

Class NumberTP391.41

1 引言

近年来,随着计算机和电子技术的发展,图像视频处理技术已广泛应用到工业技术、医疗诊断、航空航天、农业、资源、环境、气象、交通监测及文化教育等领域,并且取得了巨大的经济效益和社会效益[1~10]。例如,梁涛等在VC++开发平台上,结合OpenCV技术和外接摄像头,提出了一种人眼识别和跟踪的视频图形检测方法[11]。王徐华等设计了一种图像视频处理系统,用于辅助飞行员完成目标搜索、自动跟踪目标、测量目标方位/速度、控制武器发射等功能[12]。马新明等采用OpenCV计算机视觉库混合编程,设计实现了一种用于快速诊断作物病害的图像处理系统,为用户提供辅助决策,以降低病害对作物生产的影响[13]。总结分析现有的相关研究,图像以视频方式展示的过程主要可以分为三大部分:帧处理、渲染和显示。综合而言,目前在图像视频帧处理、渲染和显示的过程中,主要存在如下问题:1)图像的流畅性与图像渲染的帧率密切相关,当渲染的帧率提高到大于摄像头本身支持的最大帧率时,从摄像头获取每一帧数据,会拖慢渲染的速度,直接影响用户体验;2)渲染后的开源计算机图像库图像要转换为hbitmap(位图句柄)图像才能显示到屏幕上,这个过程相当损耗CPU性能;同时由于bitblt(位图动画)的渲染没有通过硬件加速,渲染效率比较低,帧数据经过帧处理到渲染整个过程所需要的时间变长,直接影响图像的流畅性和用户的体验。

针对以上不足,本文基于OpenCV研发了一种提高文件拍摄流畅性的方法和系统。通过将渲染的帧数据和摄像头获取的帧数据的速率进行分离,渲染较快时帧进行重复使用,可以在界面操作频繁的时候设置较大的渲染速度,让绘图或者批注的操作相对流畅;同时,通过异步渲染的方式使得帧处理的逻辑和渲染的逻辑分别运行在不同的两个线程当中;当从摄像头获取的视频图像帧数大于帧处理的视频图像帧数时,通过适当的丢帧操作,提高文件拍摄的操作效率和流畅度,降低CPU的损耗,提高图像视频的流畅性,为用户提供更好的体验。

2 OpenCV简介

OpenCV(Open Source Computer Vision)诞生于Intel研究中心,是一个开放源码的计算机视觉库。OpenCV是专门用于数字图像处理的函数库,能够在Windows、Linux、Mac平台中运行,它由一系列C函数和少量C++类构成,提供了针对各种格式的视频图像源文件(如:bitmap图像、video文件和实时摄像机视频流)的帧提取函数和多种标准图像处理算法,这些函数在具体的开发项目中直接调用,即可完成复杂庞大的开发任务[14~20]。OpenCV的设计简单易用,其中大部分类及库函数的设计都有其特定的在实际应用的背景,因此整个库的体系结构非常简单明了,提供了一些诸如Python、Ruby、Matlab等其他预言或环境的接口。OpenCV的体系结构如图1所示。

图1 OpenCV基本结构

OpenCV的CV模块包含基本的图像处理函数和高级的计算机视觉算法。MLL是机器学习库,包含一些基于统计的分类和聚类工具。HighGUI包含图像和视频输入/输出的函数。CXCore包含OpenCV的一些基本数据结构和相关函数。图1中并没有包含OpenCV中另外一个模块:CvAux模块,该模块中一般存放一些即将被淘汰的算法和函数,同时还有一些新出现的实验性的算法和函数[20~21]。

本文基于OpenCV原理和方法,提出一种提高文件拍摄流畅性的方法和系统,解决了目前图像视频处理、渲染和显示过程中存在的主要问题,提高图像处理、渲染速度和效率,降低CPU损耗,提高图像视频的流畅性,为用户提供更好的体验。

3 系统的设计与实现

3.1系统结构

论文研发的提高文件拍摄流畅性的方法和系统,主要由图像扫描单元、采集和存储单元、处理单元以及渲染和显示单元四大系统单元组成,系统的功能单元模块如图2所示。

图2 系统功能单元模块示意图

1)图像扫描单元模块,主要用于通过摄像头对文件进行图像扫描,获取所述文件的在前视频图像;该单元还包括音频信息采集单元,用于通过麦克风捕获音频信息。本系统图像扫描的流程如图3。

图3 本系统图像扫描流程

2)图像采集和存储单元模块,主要用于采集所述在前视频图像,并将所述在前视频图像以及采集该在前视频图像的时间存储到存储单元中。视频图像通过视频采集卡进行采集,然后再由视频采集过滤器(Video Capture Filter)从视频采集卡中获得视频图像数据流进行解码。解码后的视频图像直接存储到存储单元中,这样帧处理可直接从存储单元中调取。采集存储单元的流程如图4所示。

图4 本系统图像采集和存储流程图

3)处理单元模块,主要用于通过帧处理线程对存储单元中的在前视频图像进行帧处理。为了实现异步渲染,将原本只有一个线程实现帧处理和渲染的过程,分割成由独立的帧处理线程实现帧处理过程以及由独立的渲染队列处理线程实现渲染过程,帧处理过程的帧数据(为在前视频图像)来自于存储单元,帧处理后的帧数据在储存到渲染队列中,渲染队列处理线程只针对渲染队列中的帧数据进行渲染。创建帧处理线程以及渲染队列处理线程只执行一次,之后的各种操作时忽略这两个步骤。

帧处理是通过帧处理线程读取摄像头采集的帧数据并转换成开源计算机图像库OpenCV图像,并将该图像送入每个自定义的过滤器(Filter)中进行处理,过滤器是基于DirectShow创建的组件对象模型(COM),执行一些多媒体流的操作,如绘图、批注等。过滤器的种类有很多,不同种类的过滤器相互连接在一起就形成了过滤器图表。同时,帧处理过程还包括通过OpenCV对视频图像进行的处理包括如视频绘图、视频的旋转、图像的纠偏、图像的自动捕捉与拍照、图像的自动去黑边、剪切等,高效率的实现了视频图像的实时处理。

在帧处理过程中,为了控制帧率和CPU的使用率,在线程中每处理完一帧都调用了sleep函数执行挂起操作,这样即可以降低了CPU的使用率,也可以控制帧率。如果在单位时间内从摄像头获取的视频图像帧数大于帧处理的视频图像帧数,则执行丢帧操作,所述丢帧操作为将多余部分不进行帧处理以及渲染而直接释放,所述多余部分为在单位时间内从摄像头获取的视频图像帧与帧处理的视频图像帧相减后的视频图像帧。

本系统帧处理的流程如图5所示。

图5 本系统帧处理流程图

4)渲染和显示单元模块,主要用于通过渲染队列处理线程对该在前视频图像进行渲染后使其显示在用户指定的窗口中。主要包含如下过程:

创建渲染队列:在渲染模块启动的时候,即帧处理完成后,创建一个有别于帧处理线程的渲染队列处理线程和一个对渲染队列处理线程相对应的渲染队列,渲染队列处理线程只调用渲染队列中的视频图像进行渲染操作,同时,渲染队列是在内存中创建。

压入:将帧处理后的在前视频图像压入到所述渲染队列中,使得渲染队列处理线程只处理该压入到所述渲染队列中的视频图像。

渲染队列检测:通过渲染队列处理线程实时检测所述渲染队列中是否存在在前视频图像,如果存在,则进行渲染和显示,反之,如果未有压入的视频图像,而渲染的时间又小于时间间隔,则渲染队列处理线程继续将之前渲染过的视频图像再次渲染并显示。

渲染和显示:通过渲染队列处理线程对该在前视频图像进行渲染后使其显示在用户指定的窗口中。渲染的时候先把OpenCV的图像转化为hbit⁃map对象,即转换成适应于位块转换方式的位图句柄图像,然后通过bitblt的方式进行图像的显示。

文件再扫描,获取在后视频图像:如果渲染在前视频图像的时间小于间隔时间,则对文件进行再次图像扫描,获取所述文件的在后视频图像,并将该在后视频图像依次执行图像采集和存储、帧处理、压入、检测、渲染和显示的操作。即当在前视频图像渲染完后要判断现在的时间是否到了可以从摄像头获取下一帧视频图像(即在后视频图像)的时间间隔,这里的时间间隔是指摄像头采集在后视频图像的时间与采集在前视频图像的时间之差,如果帧处理过程中设定了挂起操作,则包括该挂起时间,如果还没到,但是已经到了要渲染下一帧的时间了,这时候,这一个要渲染的帧不再通过摄像头获取,而是直接读取存储单元中的在前视频图像;但是当走到渲染和显示中发现如果渲染存储到渲染队列中的在前视频图像的时间(这个时间理应包括压入渲染队列中的时间)已经足够可以从摄像头获取下一帧视频图像的时候,到了必须要通过摄像头获取下一帧数据的时候(如果不在摄像头获取,而是长时间通过存储单元获取,会导致界面看到的图像数据延时比较严重),就通过摄像头获取帧数据并同样的把这一帧数据和获取这帧数据的时间在存储单元中保存起来,然后对该在后视频图像的处理方式与在前视频图像的处理方式相同,对待后续每一帧视频图像均采用该方式。这样做,刷新(渲染)较快时候在前视频图像重复使用,可方便在界面操作频繁的时候设置较大的渲染速度,让绘图或者批注的操作相对流畅,同时硬件帧的采集速度也控制了起来,提供了更好的用户体验。

本系统渲染和显示的流程如图6所示。

图6 本系统的渲染和显示流程示意图

3.2系统整体处理流程

该系统的整体处理流程如图7所示。

步骤1、通过摄像头对文件进行图像扫描,获取所述文件的在前视频图像;

步骤2、采集所述在前视频图像,并将所述在前视频图像以及采集该在前视频图像的时间存储到存储单元中;

步骤3、创建帧处理线程;

步骤4、通过帧处理线程对存储单元中的在前视频图像进行帧处理;

步骤5、帧处理完毕后,创建一渲染队列和与所述渲染队列对应的渲染队列处理线程,所述渲染队列在内存中建立;

步骤6、将帧处理后的在前视频图像压入到所述渲染队列中;

步骤7、通过渲染队列处理线程实时检测所述渲染队列中是否存在在前视频图像,如果存在,则执行步骤8;

步骤8、通过渲染队列处理线程对该在前视频图像进行渲染后使其显示在用户指定的窗口中;

步骤9、在步骤8中,如果渲染该在前视频图像的时间小于间隔时间,则继续执行步骤8,反之,则执行步骤10;

步骤10、对文件进行再次图像扫描,获取所述文件的在后视频图像,并将该在后视频图像依次执行步骤2、4、6、7的操作,所述间隔时间为采集所述在后视频图像的时间与采集在前视频图像的时间之差。

图7 本系统的整体处理流程示意图

3.3 系统的特征

与现有技术相比,本研究提出的提高文件拍摄流畅性的方法和系统,可广泛应用到图像的采集、显示、存储和应用中。具有如下的特征:

1)通过将渲染的帧数据和通过摄像头获取的帧数据的速率进行分离,刷新较快时帧进行重复使用,可以在界面操作频繁的时候设置较大的渲染速度,让绘图或者批注的操作相对流畅,提供了更好的用户体验。

2)通过异步渲染的方式使得帧处理的逻辑和渲染的逻辑分别运行在不同的两个线程当中,比原来两个逻辑都在同一个线程当中进行流水式的操作效率更好,也提高了用户的体验度。

3)在每次帧处理后执行挂起(通过sleep函数实现)操作,这样既可以降低CPU的使用率,也可以控制帧率。

4)在人眼分辨不出的情况下,通过适当的丢帧操作,进一步提高流畅度。

4 系统仪器及其应用实例

4.1系统软件介绍

应用上述理论和方法,本文研发了具有自主知识产权的高拍仪及其系统软件,可以一键快速拍摄高清文档,使视频制作更加高效、流畅;可广泛应用到多媒体教学等领域,软件界面如图8所示。

图8 本文研发的高拍仪软件界面示意图

打开软件,进入软件主界面,用户可以在这个界面进行实物演示、拍照或者视频制作等。主界面包含了标题栏、视频工具、视频图像区、白板工具区和设置区。标题栏主要用于显示本软件的标题,包含了系统菜单;视频展示工具区可以使用户实现对视频画面的任意放大和缩小,即使是很小的文字、细节、实物也能清晰的显示,并能通过旋转工具调整画面实现任意角度的显示;设置区,用户可以选择更换视频设备、文件类型、文件质量、去黑边、纠正、颜色模式、分辨率等进行设置;视频图像区主要展示视频展台捕捉到的图像;白板工具区主要是对图像进行批注,如颜色、线条大小、形状、文字输入、橡皮擦、拍照、连拍、指定拍摄等。

4.2应用实例

下面以多媒体教学为例对高拍仪和系统软件进行实例分析。本软件在对媒体教学中可以高效实现:1)一键快速高清文档拍摄,课件制作更加高效高速;2)可以实现全屏高清实物展示,画面逼真、视觉冲击力强,使多媒体互动式教学更加富有活力、生动、有趣;3)实时缩放、旋转、移动,实时对展示画面进行批注,高清音视频录制,多分屏对比教学,文档拍摄、进行课件采集、收集课件素材,一键PDF转换,支持图片完美拼接和拆分等功能,让多媒体教学更便捷、内容更丰富多彩。图9是利用该软件拍摄到的多媒体教学过程中的图像视频截图展示实例。

图9 多媒体教学过程中的软件图像视频截图展示实例

5 结语

通过大量文献分析,论文总结了目前图像视频处理、渲染和显示过程中存在的主要问题;以此为基础,基于OpenCV,提出了一种提高文件拍摄流畅性的方法和系统,通过将渲染的帧数据和摄像头获取的帧数据的速率分离,同时通过异步渲染的方式将帧处理的逻辑和渲染的逻辑分别运行于两个不同的线程中;通过适当丢帧的操作,进一步提高文件拍摄流畅度;论文对该系统的体系结构、处理流程和系统特征等进行了详细论述;基于此系统理论方法,研发了高拍仪及其处理系统软件,并对其在多媒体教学中的应用开展了实例分析。结果表明,论文提出的提高文件拍摄流畅性的方法和系统,可以提高图像的处理、渲染速率,降低CPU损耗,提高图像视频的流畅性,提供更好的用户体验,可广泛应用到各领域的图像视频处理,具有重要的应用价值。

[1]陆旭,梁光明,陈韵迪.一种基于ARM的嵌入式图像处理系统设计[J].计算机与数字工程,2016,44(9):1812-1815.

LU Xu,LIANG Guangming,CHEN Yundi.Embedded Im⁃age Processing System based on ARM[J].Computer& Digital Engineering,2016,44(9):1812-1815.

[2]钱俊,符意德,逯沛龙.双目视觉的图像采集模块设计[J].计算机与数字工程,2015,43(4):725-728.

QIAN Jun,FU Deyi,LU Peilong.Design of Image Acquisi⁃tion Module of Binocular Vision[J].Computer&Digital Engineering,2015,43(4):725-728.

[3]叶青,胡昌标.基于图论的图像分割方法关键技术研究[J].计算机与数字工程,2016,44(8):1563-1566.

YE Qing,HU Changbiao.Key Techniques of Image Seg⁃mentation based on Graph Theory[J].Computer&Digital Engineering,2016,44(8):1563-1566.

[4]J.Kapur,P.Sahoo,A.Wong.A new method for gray-lev⁃el picture thresholding using the entropy of the histogram computer vision[J].Graphics and Image Processing,1985,29:273-285.

[5]张欢欢.基于嵌入式图像处理的仪表智能识别技术研究[D].杭州:浙江理工大学,2015.

ZHANG Huanhuang.Meter Intelligent Identification Tech⁃nology based on Embedded Image Processing[D].Huang⁃zhou:Zhejiang Sci-Tech University,2015.

[6]檀柏红,任立肖,张丽.基于视频图像处理技术的汽车防撞系统的研究现状[J].北华航天工业学院学报,2008,18(5):7-10.

TAN Baihong,REN Lixiao,ZHANG Li.State-of Art of Vehicle Collision Avoidance System based on Video Im⁃age Processing[J].Journal of North China Instutite of Aerospace Engineering,2008,18(5):7-10.

[7]徐东彬,刘昌平,黄磊.融合边缘和角点特征的实时车辆检测技术[J].小型微型计算机系统,2008,29(6):1142-1145.

XU Dongbin,LIU Changping,HUANG Lei.Real-time Ve⁃ hicle Detection Uing Edge and Corner Feature[J].Journal of Chinese Computer Systems,2008,29(6):1142-1145.

[8]江超,艾矫燕.基于OpenCV的摄像头动态手势轨迹识别及其应用[J].计算机应用,2012,32(S1):129-133.

JIANG Chao,AI Jiaoyan.Dynamic Gesture Trajectory Rec⁃ognition and its application design for camera based on OpenCV[J].Journal of Computer Applications,2012,32(S1):129-133.

[9]贾小军,喻擎苍.基于开源计算机视觉库OpenCV的图像处理[J].计算机应用与软件,2008,25(4):276-278.

JIA Xiaojun,YU Qingcang.The Image Processing based on OpenCV[J].Computer Applications and Software,2008,25(4):276-278.

[10]梁涛,张志文.基于OpenCV的视频图像人眼跟踪方法的研究[J].科学技术与工程,2013,13(5):1354-1358.

LIANG Tao,ZHANG Zhiwen.Eye Tracking Method based on the OpenCV Video Image[J].Science Technol⁃ogy and Engineering,2013,13(5):1354-1358.

[11]王徐华,樊晓光,徐显亮.基于TMS320DM642的视频图像处理系统设计与实现[J].器件与应用,2009,33(10):28-31.

WANG Xuhua,FAN Xiaoguang,XU Xianliang.Design ofVideoImageProcessingSystembasedon TMS320DM642[J].Video Engineering,2009,33(10):28-31.

[12]马新明,赵晓莉,时雷,等.基于OpenCV的图像处理系统设计与实现[J].河南农业大学学报,2014,48(1):87-90.

MAXinming,ZHAOXiaoli,SHILei,etal. OpenCV-based Image Processing System Design and Im⁃plementation[J].Journal of Henan Agricultural Universi⁃ty,2014,48(1):87-90.

[13]刘丽梅,郑新武,陈永明,等.基于OpenCV的图像处理程序开发方法的研究[J].计算机技术与应用,2010(5):21-24.

LIU Limei,ZHENG Xinwu,CHEN Yongming,et al. OpenCV-based Image Processing Program Method[J]. Computer Technology and Application,2010(5):21-24.

[14]滕俊,王弟林,文汉云.基于OpenCV下的Visual C++数字图像处理方法[J].现代计算机:专业版,2012(11):70-72.

TENG Jun,WANG Dilin,WEN Hanyun.Visual C++Dig⁃ital Image Processing Method based on OpenCV[J]. Modern Computer,2012(11):70-72.

[15]尹俊超,刘直芳.基于OpenCV的运动目标检测与跟踪[J].计算机工程与设计,2011,32(8):2817-2820.

YIN Junchao,LIU Zhifang.Detection and Tracking of Moving Objects based on OpenCV[J].Computer Engi⁃neering and Design,2011,32(8):2817-2820.

[16]王浩,许志闻,谢坤,等.基于OpenCV的双目测距系统[J].吉林大学学报(信息科学版),2014,32(2):188-194.

[17]WANG Hao,XU Zhiwen,XIE Kun,et al.Binocular Mea⁃suring System based on OpenCV[J].Journal of Jilin Uni⁃versity(Information Science Edition),2014,32(2):188-194.

[18]秦小文,温志芳,乔维维.基于OpenCV的图像处理[J].电子测试,2011(7):39-41.

QIN Xiaowen,WEN Zhifang,QIAO Weiwei.Image Pro⁃cessing based on OpenCV[J].Electronic Test,2011(7):39-41.

[19]王咸锋,黄妙燕.基于OpenCV实现文档物体的纠偏方法[J].电脑知识与技术,2016(24):87-89.

[20]WANG Xianfeng,HUANG Miaoyan.Realization of Docu⁃ment Object Rectification Method Based on OpenCV[J]. Computer Knowledge and Technology,2016(24):87-89.

[21]区文博.基于DorectShow和OpenCV的视频图像处理系统[D].北京:北京邮电大学,2011.

QU Wenbo.The Video Processing System based on Di⁃rectShow and OpenCV[D].Beijing:Beijing University of Posts and Telecommunications,2011.

A Method and System for Improving Fluidity of Document Filming Based on OpenCV

WANG Xianfeng
(Department of Construction Information,Guangdong Construction Vocational Technology Institute,Guangzhou510440)

Based on the problems of slow rendering speed,low efficiency,large CPU loss,low fluency,and the difficulty of meeting the needs of users'experience,this paper presented a method and system for improving fluency of document filing based on the OpenCV(Open Source Computer Vision).The rate of the frame data from rendering and the frame data from the camera are sep⁃arated to run in two different threads through the asynchronous rendering of the frame processing logic and rendering logic.Then,through the appropriate drop frame operation to improve the file shooting fluency,this method can reduce the CPU usage and im⁃prove the speed and efficiency of image rendering,thereby enhancing the fluency of image and video to provide users with a better experience.The method and system can be widely applied to various fields of image and video processing,and has important appli⁃cation value.

OpenCV,document filming,fluidity,frame data,asynchronous rendering

TP391.41

10.3969/j.issn.1672-9722.2017.05.023

2016年11月15日,

2016年12月19日

国家自然科学基金(编号:50908037)资助。

王咸锋,男,副教授,研究方向:软件开发与图像处理。

猜你喜欢

线程队列图像处理
海战场侦察图像处理技术图谱及应用展望
人工智能辅助冠状动脉CTA图像处理和诊断的研究进展
实时操作系统mbedOS 互斥量调度机制剖析
浅析体育赛事售票系统错票问题的对策研究
队列队形体育教案
队列里的小秘密
基于多队列切换的SDN拥塞控制*
基于ARM嵌入式的关于图像处理的交通信号灯识别
基于图像处理的废有色金属自动分选算法研究
在队列里