基于背景差分法的物体识别毕业设计论文

上传人:无*** 文档编号:78528522 上传时间:2022-04-21 格式:DOC 页数:35 大小:626.50KB
收藏 版权申诉 举报 下载
基于背景差分法的物体识别毕业设计论文_第1页
第1页 / 共35页
基于背景差分法的物体识别毕业设计论文_第2页
第2页 / 共35页
基于背景差分法的物体识别毕业设计论文_第3页
第3页 / 共35页
资源描述:

《基于背景差分法的物体识别毕业设计论文》由会员分享,可在线阅读,更多相关《基于背景差分法的物体识别毕业设计论文(35页珍藏版)》请在装配图网上搜索。

1、基于背景差分法的物体识别 OBJECT RECOGNITION BY BACKGROUND DIFFERENCE METHOD 专 业:自动化摘 要图像识别技术在很多领域都是产业现代化的基础,所以在当今社会它成为了研究的热门学科。由于被测物体会由于时间的不同,背景的不同,气候的不同,被测物体会表现出不同的外形特征,具有错综复杂和瞬间转变的性质1,所以图像识别的准确率一直是一个难以解决的课题。而基于背景差分的图像识别技术则能很好地解决这一困难的问题,它是整个图像识别领域中最基础并且可靠性最高的一门科学2。这种方法以将背景图片与实时图像作差分的方法有效提高普通图像识别方法的准确度3,也可以对运动物

2、体做出准确性较高的识别,并且具有较快的处理速度,能在OpenCV1.0的帮助下完成目标。目前,基于背景差分的图像识别主要应用于车辆流量检测技术4、车牌检测5、弱信号的目标检测、稻米粒优劣的判断、运动人体检测等领域。本文使用USB外接摄像头从外界获得背景与被测视频流,在Windows系统下利用Visual Studio C+6.0与OpenCV 1.0结合编程的方法6,对背景与被测视频流做差分,从而达到物体识别的目的。由于使用的摄像头分辨率较低,所以测量的结果精确度并不是很高,测量物体也较为简单,如何利用高分辨率的摄像头以及高版本OpenCV函数来识别更复杂的被测物体是今后的研究目标。关键词:

3、背景差分; 图像识别; Opencv;Visual Studio C+6.0 ABSTRACTImage Recognition has been one of the most popular deciplines because that its the key of Industrial modernization in numerous fields. The measured objects will be in difference shape for the difference of seasons; background and temperature.They are co

4、mplex and variable, thus, its really a tough work to increase the accuracy of Image Recognition. Image recognition technology based on background subtraction, a subject that is very reliable and accurate in the Image Recognition field, solves that problem well.This method improves the accuracy effec

5、tively by differencing the video stream to a background picture, it also can identificat the moving subject effectively, it can progress a subject in high speed by the using of the opencv 1.0. At present, Image Recognition is often utilized in the field such as vehicle traffic detection technology,t

6、arget detection of weak signals, judge the merits of rice and Human Movement detection,there we get backgroud and video stream from the outside world by USB external camera, programme with opencv 1.0 by visual studio C+6.0 in the operating system of Windows.Then we identificate a subject by differen

7、cing backgroud and video stream.The acurracy of Image Recognition is below the ideal situation because of the resolution of USB external camera.Also the subject is very simple.Its our future research goals that using USB external camera with a high resolution and a high version of the opencv functio

8、n to identificate more complex objects.Key words: Background difference;Image Recognition;opencv;visual studio C+6.0目 录摘 要IABSTRACTII目 录III第一章前言1第一节 计算机领域的物体识别的发展历史1第二节 计算机图像获取技术现状及前途2第三节 计算机图像识别技术现状及前途4第四节 色彩标准分类5第二章差分法应用6第一节 数学中的差分法6第二节 背景差分法和帧间差分法6第三章Opencv的介绍与使用8第一节 opencv简介8第二节 有关图像识别的opencv函数9

9、第四章利用C+实现图像获取与识别13第一节 C+的发展阶段13第二节C+的特点14第三节 基于背景差分法的物体识别的程序14第四节 程序运行结果22第五章结论27参考文献28致 谢30第一章 前言本章主要介绍了与论文相关的计算机的发展历程和计算机图像识别和背景差分的发展现状,并列举了一系列的研究成果,论述了本实验的实验目的以及工作条件。第一节 计算机领域的物体识别的发展历史图像识别,又称计算机图像识别,指通过计算机摄录或存储等途径获得的图片进行处理,分析最终对其进行识别理解的过程。在工业生产自动化的当代社会,仅仅通过人类对物体进行感官判断来辨别产品或者其他事物显然已经不能满足快节奏运转的世界,

10、在这种大背景下,计算机图像识别技术诞生了,它通过摄像头从外界获取视频形式的数据,再将其变成图片形式数据,和已经输入的或者即时更新的数据作比较,以此来判断目标物体是否符合要求,这一工作模式十分类似于人脑和眼的协调工作模式,因此计算机图像识别这一技术在很多行业迅速得到应用,利用摄像头工作的计算机,甚至机器人等高科技产品不断产生,在一些高危险性,环境恶劣,可活动体积小等不适合人类行动或需长时间工作的特殊环境下发挥了重要作用,大大的降低了特殊职业人群的工作环境和生存率,也加快了行业发展速度。在这一社会大环境下,越来越多的企业以及个人都着手研发计算机图像识别这一门科学,计算机1946年被发明至今这不到1

11、00年时间里,计算机图像识别技术已经获得了很大的进步。工业自动化以来,每个工厂每天都要出厂数以万计的产品,由自动化流水线制造的产品虽然次品率已经极大降低,但还是存在,用人眼来判断正品次品虽然可行,但是需要耗费大量人力物力,不但降低了生产效率,还为企业浪费大量资金,在企业的需要下,产生了基于图像识别的次品监测装置,该装置只需要少量操作人员,而且操作简单,一般工人经过培训即可使用,既加快了工作效率,也节约了资金,迅速在工业生产、制造业广泛应用。洪水、地震、火灾乃至核事故造成的辐射等等恶劣环境下往往是人类所不能长期停留甚至不能生存的,一旦遇到这些事故,救援工作往往十分难以展开,救援人员经常束手无策,

12、坐视一个个生命远去。为了改变现状,科学家研制出一种救灾机器人,它能在这些环境下以人操作,和自主探测方式进行救灾活动,提高了救援速度,也提高了救援人员的生还率,立即成为世界机器人研究界的研究热点。在当今社会反恐环境日益严峻的情况下,相应的武器装备的改变也在悄然发生,二战以来的大威力,大杀伤力进程火炮逐渐失去了原来的地位,取而代之的是火力适当,附带伤害小的精确战术武器电视制导导弹,图像制导导弹,这种武器快速精确,能够有效打击武装分子并把平民伤害降到最低,符合当今世界人道主义的主题,逐渐受到各国的青睐。人脸识别是现今最热门的研究方向之一,在磁卡解锁的锁闭方式安全性以及稳定性不能得到保证的情况下,愈来

13、愈多的对安全性要求过高的机构采取了人脸识别或虹膜识别模式,虽然价格昂贵,仪器体积庞大,具有科研能力的单位较少,但这种方式具有可靠性高,使用方便等优势。迄今为止,图像识别领域已经取得了极大的进步,但随着科技的发展,它随时都有可能获得更大的进步。第二节 计算机图像获取技术现状及前途自1973年面世以来,摄像机一直是人类记录动态物体的唯一方法,在计算机上应用的图像获取装置也只有摄像头,所以摄像头的发展极大地影响了图像获取技术的发展。40多年前美国安培公司推出世界第一台可以投入实际使用的摄像机。这种摄像机采用摄像管作为摄像元件,因此寿命低,性能不稳定而且价格高昂等缺陷限制了摄像机的普及,一直到摄像机的

14、下一次革命,这种高贵的产品一直只能用于特定领域,无法民用化。1976年,摄像机技术迎来了一次革命性的飞跃。JVC公司推出第一台家用摄像机,使用的是VHS格式(Video Home System,家用摄像系统),VHS采用12.65毫米盒带,极大地降低了摄像机价格,简便了其操作,使其在推出之后广受大众喜爱,迅速在民用市场上普及,将摄像这一技术带入人们观念。在市场的推动下,VHS很快暴露出了其弱点清晰度低,仅仅有250线的清晰度广为使用者诟病,为弥补这一不足,JVC公司很快研制出一种SVHS摄影机,这种摄像机可以拍摄高达400线的视频,满足了大众需求。然而VHS与SVHS庞大的体积却让它在流通的时

15、候遇到了巨大的阻力,因此,1982年,VHS-C和S-VHS-C两个型号的摄像机应运而生。这两种摄像机的机能与前两种相差无几,均使用同样宽度的磁带,可以通过适配器连接到录像机上观看,但92mm X 69mm X 23mm的轻便体积让其在对前者的竞争中占尽优势,称为社会主流,摄像机也由这股风潮进入我国。VHS-C和S-VHS-C的成功并没有终结摄像机轻便小体积化的脚步,反而加速了其进程,继JVC公司之后,索尼(SONY),夏普(Sharp),佳能(Canon)也推出了自己的小型摄像机8mm摄像机,通称V8。这种摄像机采用8mm磁带,体积的缩小给摄像机带来的负面效果就是拍摄清晰度降低为270线,而

16、且这种摄像机拍摄的磁带不能再用VHS录像机播放,只能用摄像机播放。V8面世不久,索尼公司又独自推出了一款家用摄像机Hi8,同样使用8mm磁带的Hi8结构更加精密,摄像清晰度达400线,将家用摄像机性能推至又一高水平。随着时代发展,VHS、SVHS、VHS-C、S-VHS-C、V8和Hi8都不能满足用户需求,于是,DV应运而生。DV,全称digital video camrecoder(数码摄像机),以小体积的Mini DV为存储介质,分辨率可达500线远高于前面任何一种摄像机的清晰度的低于400的清晰度。DV拥有超高频宽的亮度和色彩度,是普通摄像机的六倍,纯正的色彩士气基本达到专业级水平,它基

17、本可以无限翻录不损失画质,使用ieee 1394数码输出端子,使数据传输简单可靠,基本无损。以上的优势让DV在出现不久就迅速占据市场。2003年,索尼,夏普,佳能,JVC公司联合推出了HDV格式,目的是为了开发一种能录制具有更高清晰度和高质量的家用便携摄像机。这种摄像机的诞生使得电视的清晰度第一次超越了胶片拍摄的电影。达到720线逐行扫描或1080线隔行扫描的清晰度。由于DV格式的深入人心和HDV刚刚出现不久,2005年前,数码摄像机的主要存储介质还基本都是Mini DV,它的记录时间一般为60分钟,部分摄像机具有LP功能,可以将记录时间延长到90分钟,而不损失画质, 由于其高画质小体积,令其

18、在专业摄影界也拥有了一席之地,如松下的DVCPRO和索尼的DVCAM等都是著名的专业摄影机,他们为了满足专业人士需要,将录像时间长度调整为180分钟,依然采用Mini DV作为主要存储介质。表2.1 HDV和DV的比较HDV(1080i)HDV(720i)DV存储介质DV磁带视频信号1080/60i及1080/50i720/25p720/50p(PAL)720/30p720/60p(NTSC)像素140010801280/720720576 (PAL)720480(NTSC)宽高比16:94:3(16:9)压缩(视频)MPEG-2视频(框架和级别,MPH-14)DV亮度抽样频率55.6875

19、MHz74.25 MHz13.5MHz抽样格式4:2:04:2:0(PAL)4:1:1(NTSC)量化值8比特压缩后比特率(视频)25 Mbps19 Mbps25 Mbps压缩(音频)MPEG-1音频层II抽样频率48 kHz48kHz/44.1kHz(2声道模式)32kHz(4声道模式)量化值16比特16比特(2声道模式)/12比特 非线性(4声道模式)压缩后比特率(音频)384kbps1.5Mbps音频模式立体声(2声道)立体声(2声道)/立体声2(4声道)数据格式MPEG-2系统-流类型打包基本流传输流-流接口IEEE1394(MPEG-2-TS)IEEE1394(DV)随着时代的发展,

20、各国又推出了高清这一模式,使清晰度达到16:9比例下的1280*720,1920*1080。当然每个公司都有着自己的特有清晰度,使得市场上的视频产品规格不一,不过随着产业升级,各个不同的规格一定会统一成更好的规格。第三节 计算机图像识别技术现状及前途计算机图像识别这门学科在当今人工智能领域中已经占据了相当大的空间,为了能更加精确的模拟人类智能,图像识别必不可少,为此人们提出多种图像识别模型,如模板匹配模型。模板匹配模型,又叫模板,是一种对比识别的识别模式,即,计算机如果想识别一个图像,负责识别的存储空间内必须有与其相对应的模板,如果有,则可识别,没有,则无法识别。例如,电脑要识别B这个字母,就

21、要首先在脑内寻找与B这个图形大小、方位和形状都匹配的的模板,如果找到了,就可以完成识别,确认这个字母是B。这种方法非常简单,但是这只是一种十分理想化的识别方法,现实世界中的,物体的物力外形虽然不会经常变化,但随着视角,光线和外力的影响,物体的视觉外形是经常变化的,把所有的可能性全部做成模板显然过于复杂,不能实际应用。而且单单从字母识别这个问题上看,如果模板里的字母B是印刷体,而被测物体是手写体,也会造成识别不成功,所以模板法并不可行。格式塔心理学在模板法识别图像这一研究上也提出了具有格式塔心理学特征的原型匹配模型。这种模型强调人类识别某个物体并不是基于长时间大量记忆某个物体的全部形态,而是通过

22、相似性来识别,这种相似性是从记忆的模板中提取出来,用以衡量当时视线里看到的物体的一种原型,当看到一个图像时,搜索脑内,寻找拥有相似特性的模板,如果有相似的模板在,那么成功识别,否则无法识别,计算机不认识这个物体。它也很好的说明了人类对不规则物体的识别。但是这种模板有一个缺憾,就是没有说明人类如何获得这种相似性,没有编程依据,也就无法在计算机上实现。随即,又有新的模型,这种模型更加复杂,它就是“泛魔”识别模型。“泛魔”识别模型图像识别系统,基于特征分析,1959年由B.塞尔弗里吉提出,这种识别模型第一次把特征觉察原理应用与图像识别。“泛魔”识别模型把图像识别分为多个不同的层次,每个层次各司其职,

23、各自进行不同的特征识别机制,一步一步识别,最终把每部分的结果合成起来,作为最终识别。每一种特征识别层被它的发明者塞尔弗里吉戏称为小魔鬼,许多这样的层合在一起,形成了所谓的“泛魔”识别模型。“泛魔”识别模型解决了相似图像识别、失真图像识别、比例放缩图像识别等难题。它可以进行学习,而且是每一层的“认知鬼”进行单独学习,这让“泛魔”识别模型具有很强的灵活性,可以随着使用者的需要进行升级。如字母识别,每个认知鬼可以逐渐学会一个字母的某一方面特征,如大小、形状,颜色等等,很多很多认知鬼合起来就可以进行一次完整的识别。现在“泛魔”识别模型已经被用于人的识别工作。第四节 色彩标准分类RGB色彩模式是工业界的

24、一种颜色标准,通过红绿蓝这三种基础颜色的不同比例搭配几乎可以获得自然界中所有颜色,而且非常符合人类对颜色的感知。RGB即是代表红(Red)、绿(Green)、蓝(Blue)三个通道的颜色,因为这个标准几乎包括了人类视力所能感知的所有颜色,而且简单易懂,所以是目前运用最广的颜色系统之一,而且衍生出各种子标准,如RGB1、RGB4、RGB8、RGB555,广泛已用于各个领域。CIE L*a*b*:由于同时使用过多无法被统一的色彩标准,导致了诸多生产设计上的不便,所以国际标准色彩协会(International Color Consortium)于1931年专门制订了一套国际通用的色彩表示标准以解决

25、该问题。这套色彩系统与印刷设备与器材都没有任何关系。L*a*b由一个垂直轴心表示明亮度(Luminance)的全白到全黑,两个水平延伸面表示色彩,其中之一为红到绿色,另外一个面表示蓝到黄色。CMYK:又叫印刷色彩模式,这种色彩模式依靠反光,与RGB十分相似,只是CMYK用的颜色不是红绿蓝,而是印刷油墨的颜色:青色Cyan、品红色Magenta、黄色Yellow。而K是黑色Black的尾字母,之所以不取首字母,是为了避免与蓝色(Blue)混淆。理论上来讲,只需要CMY三种油墨混合就能得到黑色,可是CMYK是一种用于印刷这一实际行为,而非频幕显示,以当前的生产水平不能生产出纯色油墨,所以青色品红色

26、和黄色这三种油墨混合只能得到暗红色,为了符合实际要求,才加上纯黑色这一个基础颜色。第二章 差分法应用差分法原本为数学概念,在数学与计算机结合的学科中被越来越广泛地应用于图像识别领域,且已经成为了当前主流的识别算法的核心内容,本章将对这一方法的发展历程和使用方法做一个大致的介绍。第一节 数学中的差分法在数学中,差分法是一种估计方法。它利用导数的近似公式两点间函数斜率的线性主部将其替换,使之离散化,从而达到化简的目标。常用于经济数学中和数值比较运算中。另有各种衍生差分法,如有限差分法、中心差分法。有限差分法(finite difference method)是求解积分微分方程与微分方程的数值解的方

27、法7。基本思想是用有限个离散点构成的网格来代替代替连续定解的区域, 这些离散点被称作网格的节点;用在网格上定义的离散的变量函数来近似代替连续的定解区域上的连续的函数变量;用差商来近似代替原方程和定解条件中的微商,积分用积分和来近似,于是原是连续区间内无限的微分方程和定解条件就被代数方程组以有限的形式代替,即为有限差分方程组,解此方程组就得到的值就可以近似代替原问题的解。最后再利用插值法即可得到在整个区域上从离散解向定解近似的近似解。同样,如果用数值计算法来求偏微分方程的解时,把每一个导数都用有限差分法来近似替代,那么偏微分方程的求解就可以简化为代数求解方式,这就是有限差分法求解。其步骤如下:首

28、先区域离散化,即把所求偏微分方程的求解区域划分为有限方格;然后近似替代,将方格的格点用有限差分法近似代替;最后通过近似方式逼近求解。中心差分法(central difference method)主要应用于结构动力学,基本原理是用有限差分法近似代替后,采用等时间步长t(i)=t(t为常数),用u表示位移,求近似求速度的中心差分和加速度的中心差分,其值为:u(i)=u(i+1)-u(i-1)/(2t)u(i)=u(i+1)-2u(i)+u(i-1)/(t*t)求得速度和加速度的中心差分以后,就能求解各种结构动力学问题。第二节 背景差分法和帧间差分法背景差分法(The background dif

29、ference method),这种方法在目标检测的过程中,非常依赖背景图像建模,建模的准确程度甚至直接影响识别的最后效果8。原则上任何运动目标识别算法,都要满足任何准确性不随背景变化而降低或波动,但是由于运动物体背景具有不可预知性、复杂性、时变性以及外界干扰,如光线照射角度造成的光影变化、背景物体的动作、摄像机的意外晃动、目标场景切换,加大了背景建模和模拟困难度。背景差分法对目标的快速与精确地检测识别都取决于背景图像的获取9。但是获取背景图像的时时获取与更新仅仅是理想实验条件下的理论,并不能很好地适应实际使用,但由于背景图像具有时变性,所以需要进行背景重建,即通过视频流中的帧间信息估计与恢复

30、背景,故需选择性地进行背景更新10。帧间差分法(Frame difference method),一种运动目标检测方法,通过检测视频流中的相邻两帧作差分实现目标11。这种方法很好的解决了同一背景内多个物体运动和摄像头移动造成的检测准确率波动问题12。帧间差可以很好的反映出监控场景内的每一个变化,包括被测目标和背景内任何物体的细小抖动。把两帧之间差的绝对值与动态阈值相比较,根据其大小关系确定有无物体运动13。以此类推,可获得整个过程内的物体运动状态。这相当于对图像序列进行了时域下的高通滤波。背景保存差分法流程图如下图所示:拍摄一组含有被测物体的视频流小于阈值大于阈值相邻两帧作差物体静止物体运动图

31、3.1 差分法流程图第三章 Opencv的介绍与使用计算机视觉领域是当今的一门前沿科学,它不仅可以用于图像中的物体分析,还能用于安全和入侵检测系统,自动监视和安全系统,制造业中的产品质量检测系统,摄像机标定,军事应用,无人飞行器,无人汽车和无人水下机器人,非常有发展潜力,但由于当今技术停留在对三维图像的二维化之后作为计算机识别的基本依据上,记录下的数据庞大而精确,很容易被噪声干扰,对于被测物体的识别并不能有效实施,为了能够利用计算机进行高级物体识别运算,opencv应运而生,本章主要介绍了opencv的来源、发展与优势。第一节 opencv简介Opencv,全称Open Source Comp

32、uter Vision Library。1999年由intel发起建立,现在由Willow Garage提供支持。是一个开源发行的跨linux,windows和Mac OS平台计算机视觉库。Opencv是一个轻量级而且高效的视觉库它由一系列的C 函数和少量 C+ 类构成, Ruby、Python以及MATLAB等语言的接口也同时被包含其中,基本实现了图像处理和计算机视觉方面通用算法。目前最新的opencv版本是2.4.5。OpenCV的C函数,包括300多个跨平台,高层次的API。它不依赖于外部库,尽管这些外部库也可以被使用。OpenCV为用户提供一个透明的接口英特尔集成性能基元(IPP)。如

33、果检测到特定的处理器优化的IPP库存在,OpenCV可以自动运行加载这些库。OpenCV 拥有包括 500 多个C,c+函数的跨平台的中、高层 API。它不依赖于其它的外部库尽管也可以使用某些外部库。在计算机视觉市场潜力飞速增长的当今,却很少有一款兼容性高,平台广泛的视觉函数库,已有的大多数函数库或者正在研究,或者商业化明显,价格昂贵,亦或者使用方向明显,不具有普遍性。OpenCV的出现很有效的解决了这一问题。高性能的C代码编程极大地提高了运行速度,还可以通过购买intel的IPP高性能多媒体函数库(Integrated Performance Primitives)进一步得到更高的处理速度,

34、相比其他函数库优势非常明显,在很多国家都有广泛应用。近几年来随着移动设备android系统的兴起,基于android系统的OpenCV发展肯定会上升到一个新阶段。OpenCV的应用领域也非常广泛除了物体识别、运动分析、动作识别和运动跟踪这几个传统的使用领域以外14,还被越来越多的投入于人机互动、图像分割、人脸识别、机器人运动分析、机器视觉和结构分析等新兴技术之中。OpenCV历史发展1999年1月,Intel主导下CVL项目启动。其主要研究目标面对人机界面,和能被UI调用的实时计算机视觉库,其目的是为了自己旗下的Intel处理器做了特定优化。2000年6月,首个开源版本OpenCV alpha

35、 3发布。2000年12月,首个基于linux平台的OpenCV beta 1发布。之间相隔6年时间,开发商对opencv移植Mac OS平台做了深层研究2006年,基于Mac OS的OpenCV 1.0版本发布。2009年9月,OpenCV 1.2(beta2.0)版本发布。2009年10月1日,OpenCV 2.0版本发布。2010年12月6日,OpenCV 2.2版本发布。2011年8月,OpenCV 2.3发布。2012年4月2日,发布OpenCV 2.4版本。第二节 有关图像识别的opencv函数(1) CvSize 矩形框大小,以像素为精度typedef struct CvSize

36、int width; / 矩形宽 int height; / 矩形高 CvSize; / 构造函数inline CvSize cvSize( int width, int height );(2) IplImage IPL 图像头typedef struct _IplImageint nSize; / 将IplImage的尺寸定义int ID; / 版本 (=0) int nChannels; / 定义通道(很多OpenCV函数支持4个以内的通道)int alphaChannel; / 定义alphaChannel,OpenCV的函数库会忽略这个通道int depth; / 定义深度,其可支持

37、: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U和IPL_DEPTH_16S还有IPL_DEPTH_32S, IPL_DEPTH_32F 和 IPL_DEPTH_64F char colorModel4; / 定义colorModel4,其亦被忽略char channelSeq4; / 定义channelSeq4,其亦被忽略int dataOrder; / 定义颜色通道,其中0被称为交叉存取,1被称为分开存取,交叉存取只有cvCreateImage可实现int origin; / 定义结构,其中0为顶左,1为底左 int align; / 图像行,(取值为

38、4 或者 8). OpenCV不会调用这个值,在它的位置出现的是widthStep int width; /定义图像的宽度值int height; / 定义图像高度值struct _IplROI *roi; / 图像集中观察区域。当这个数值不是0的时候程序只对这个被定义的区域进行运算struct _IplImage *maskROI; / 这个值是一个OpenCV一直将其设定为空的值void *imageId; /这个值是一个 OpenCV一直将其设定为空的值struct _IplTileInfo *tileInfo; / 这个值是一个 OpenCV必定将其设定为空的值int imageSiz

39、e; /定义所用图像的数据尺寸(在交叉存取格式下imageSize=image-height*image-widthStep),以字节为单位char *imageData; / 定义图像数据int widthStep; /定义图像宽度,单位是字节int BorderMode4; / 定义边界结束的模式, OpenCV不会调用int BorderConst4; / 定义边界结束的模式, OpenCV不会调用char *imageDataOrigin; / 指针指向另一个图像数据结构(不一定要定义的),它的目的是把错误的图像的内存改正过来IplImage:IplImage源于 Intel Imag

40、e Processing Library(自带)。OpenCV 仅仅调用某个一个子集: alpha通道在 OpenCV中不会被调用。 colorModel 与channelSeq 两个定义不会被OpenCV调用。 OpenCV中仅有的颜色转换函数是cvCvtColor,它把初始图像的颜色空间里边的目标物体的颜色空间一同对待,一并看作cvCvtColor的一个参数。 数据顺序 必须是IPL_DATA_ORDER_PIXEL (颜色通道存取方式为交叉存取), 但是平面图像的被选择通道可被处理,好像COI(集中观察通道)被设定过。 当 widthStep 被用于去接近图像行序列,排列是被OpenCV

41、忽略的. 不支持maskROI。处理MASK的函数把它看成一个分离参数. 它在 OpenCV 中有 8位, 但在 IPL它只有 1位。 命名信息不被支持。 边界模式和边界常量是不被支持. 每个 OpenCV 函数处理像素的邻近的像素,通常不会采用多种固定代码边界模式。 以上所说限制之外, OpenCV对于ROI的处理方面还提出了其他要求。包括要求ROI的大小或者原图像和目标图像的大小(依操作而异,比如cvPyrDown 目标图像的宽或者高一定要与原图像的宽或者高除2 1相等)必精确匹配,并且由IPL处理的交叉区域则有可能完全独立,例如图像尺寸或者ROI尺寸。(3)CreateImage创建头并

42、分配数据IplImage* cvCreateImage( CvSize size, int depth, int channels );size 图像宽、高。 depth 图像元素的位深度,可以是下面的其中之一:IPL_DEPTH_8U - 无符号8位整型IPL_DEPTH_8S - 有符号8位整型IPL_DEPTH_16U - 无符号16位整型IPL_DEPTH_16S - 有符号16位整型IPL_DEPTH_32S - 有符号32位整型IPL_DEPTH_32F - 单精度浮点数IPL_DEPTH_64F - 双精度浮点数channels:每个元素(像素)通道号。可以是 1, 2, 3 或

43、 4.通道是交叉存取的,例如通常的彩色图像数据排列是:b0 g0 r0 b1 g1 r1.虽然通常 IPL 图象格式可以存贮非交叉存取的图像,并且一些OpenCV 也能处理他, 但是这个函数只能创建交叉存取图像。函数 cvCreateImage 创建头并分配数据,这个函数是下列的缩写型式。header= cvCreateImageHeader(size,depth,channels);cvCreateData(header); (4) Or:计算两个数组每个元素的按位或void cvOr( const CvArr* src1, const CvArr* src2, CvArr* dst, co

44、nst CvArr* mask=NULL );src1:第一个原数组。 src2:第二个原数组。 dst:输出数组。 mask:操作覆盖面( 8-bit 单通道数组); 只有覆盖面指定的输出数组被修改。 函数 cvOr 计算两个数组每个元素的按位或dst(I)=src1(I)|src2(I):对浮点数组按位表示操作是很有利的。除覆盖面,所有数组都必须有相同的类型,相同的大小(或ROI大小)。(5)GetErrStatus:返回当前错误状态int cvGetErrStatus( void );函数 cvGetErrStatus 返回当前错误状态,这个状态是被上一步调用的 cvSetErrStat

45、us 设置的。 注意, 在 Leaf 模式下错误一旦发生程序立即被终止 ,因此对于总是需要调用函数后蔡获得控制的应用,可以调用 cvSetErrMode 函数将错误模式设置为 Parent 或 Silent 。(6)Error:产生一个错误。int cvError( int status, const char* func_name,const char* err_msg, const char* file_name, int line );status 错误状态 func_name 产生错误的函数名 err_msg 关于错误的额外诊断信息 file_name 产生错误的文件名 line 产生

46、错误的行号函数 cvError 设置错误状态为指定的值(通过 cvSetErrStatus) ,如果错误模式不是 Silent, 调用错误处理器。30第四章 利用C+实现图像获取与识别C+,又名CPP,是C语言的衍生产品,1983年,由贝尔实验室的Bjarne Strou-strup推出,模块封装、保密性强,而且面对象编程,是一种非常适合现代软件编程的语言,主要编译器有Borland C+4.5,Symantec C+6.1和Microsoft VisualC+ 2012,由于考虑到使用效果和软件稳定性,本实验使用的是比较常见的Microsoft Visual Studio C+ 6.0。第一

47、节 C+的发展阶段C语言研发成功于1972年,它由美国贝尔实验室的D.M.Ritchie研制成功的 这款语言并不为初学者服务,而是专为程序员进行开发工作而研发 它大大地简化了软件开发的语言编写难度,当时大多数系统软件和许多应用软件都是用C语言编写的随着计算机硬件软件的快速发展,C语言已经渐渐地不能完全满足软件编程的需求了。这一点在软件安全性和变成复杂程度上充分地体现出来。为了满足软件大型化、复杂化的要求,贝尔工作室在1983年公开了C语言的升级版本C+,C+面对对象编程,使得原来C语言实现起来代码异常庞大的编程被简化为模块,大大提高了维护效率。C+是在继承了C语言所有的优点的情况下被设计出来的

48、,这就使C+在推出后立刻占据了C语言大量的市场份额,但C语言简单易懂的特点还是为其保留了一部分空间。1995年后,以标准模板库(STL)和后来的Boost为首的程序库的出现,进一步提高了C+对于C语言的竞争优势,但是由于编程语言的发展达到相当高的水平,大量优秀的语言诞生,如Java、C#等,这些高质量的语言的出现无疑给C+带来了不小的冲击,但事实证明,C+还是一款非常有效率,非常好的编程语言。进入21世纪以来,以以Loki、MPL等程序库为首的基于C+的产生式编程和模板元编程的不断出现,也给C+带来了一个发展高峰期,使C+不断提高,在编程语言数不胜数的今天仍能占据大量用户。值得注意的是,C+的

49、语言标准也在很大程度上领导了世界编程语言的前进方向。1998年国际标准组织(international standard organization, ISO)颁布了C+程序设计语言的国际标准ISO/IEC 1988-1998。C+是具有国际标准的编程语言,通常称作ANSI/ISOC+。1998年,C+标准委员会成立,以后以5年为周期,以需要为基准更新标准。C+ 0x最终国际投票于2011年8月10日以与会国全票通过的结果正式结束,这意味着 C+ 0x已经毫无疑义地成为正式的国际标准。这个被以C+ 0x临时命名的新标准将被正式命名为C+ 2011。C+ 2011将成为新一个C+标准,之前的标准是

50、ISO/IEC 14882,它在1998年公布,通称C+98,并在2003更新过一次,通称C+ 03。新的国际标准由国际标准化组织于2011年9月1日出版发布,编号ISO/IEC 14882 : 2011,名称Information technology - Programming languages - C+ Edition: 3。第二节C+的特点C+由C语言发展而来,继承了C语言的一切优点,具有高效率的特点,为了克服C语言编程过于简单,导致大型程序编程时语言过于繁琐不宜理解维护的缺点,C+将设计思路改为面向对象(Object Oriented),这种思路将以往需要消耗大量资源编程的某个问题

51、抽象成为类、继承,将问题抽象模块化,把计算机作为模块的加工者,而编程者作为这些模块的调控者,从而大量减少了人力资源浪费,提高了编程效率。此外,贝尔工作室为了实现从C语言向C+平滑过渡的目标,特意将C+设计成与C语言高度兼容,所以C语言的编程可以集成于C+编译环境中实现,这也一定程度上降低了C语言使用者改用C+的困难程度,推动了C+的传播。当然,C+语言也有它的缺点,那就是过度复杂性,由于它以大软件编程的优化为目标,自然就有一套面向大程序编程的复杂系统,对于小程序而言,这无疑太过复杂了,所以C+在小程序编程方面使用并不多。另外由于本身的复杂性, 就很难保证这一庞大C+程序的正确性。还有人提出C+

52、的其他缺陷,如不能支持多线程等。虽然有如此多的质疑,而且质疑多来自于知名人士,这也恰恰证明了C+使用的广泛性和高层次性。第三节 基于背景差分法的物体识别的程序#include stdafx.h #include #include #include #include #define THRESHOLD 20 / 差分时候的阈值 #define THRESHOLD_MAX_VALUE 255 / 二值化的时候使用的最大值 #define SCALE ( 1.0 / 255.0 ) / L*a*b*转换成所需要的比例因子 #define CAPTURE_OFF 0 / 定义图像的中止标志值为0 #d

53、efine CAPTURE_ON 1 / 定义图像的开始标志值为1 #define COLOR_DIFFERENCE 0 / 用RGB各成分的差分计算值的标志为0 #define LAB_DIFFERENCE 1 /用L*a*b*表彩色的差分计算的标志值为1 #define GRAY_DIFFERENCE 2 / 用灰度的差分计算值的标志值为2 #define NOISE_KEEP 0 / 不消除噪声时的标志值为0 #define NOISE_MORPHOLOGY 1 / 进行MORPHOLOGY噪音消除值的标志值为1 #define NOISE_MEDIAN 2 / 由median过滤器的噪

54、音消除的标志值为2 CvSize imageSize; / 图像的尺寸 / 基于成分的评价 / 参数: / currentImage : 当前图像用IplImage / backgroundImage : 背景图像用IplImage / resultImage : 结果图像用plImage grayScaleDifference(IplImage*currentImage,IplImage *backgroundImage, IplImage *resultImage ) / 图像生成 IplImage *differenceImage = cvCreateImage( imageSize,

55、IPL_DEPTH_8U, 3 );/ 差分图像用IplImage / 每成分取与现在的背景的差的绝对值 cvAbsDiff( currentImage, backgroundImage, differenceImage ); / 从BGR转换为灰度 cvCvtColor( differenceImage, resultImage, CV_BGR2GRAY ); / 从灰度转换为2值 cvThreshold( resultImage, resultImage, THRESHOLD, THRESHOLD_MAX_VALUE, CV_THRESH_BINARY ); / 进行阈值处理cvRelea

56、seImage( &differenceImage ); / 解放存储器void labDifference( IplImage *currentImage, IplImage *backgroundImage, IplImage *resultImage )/图像生成IplImage *currentLabImage = cvCreateImage( imageSize,IPL_DEPTH_32F, 3 ); /建立当前图像用L*a*b*用图IplImageIplImage *backgroundLabImage = cvCreateImage( imageSize, IPL_DEPTH_3

57、2F, 3 );/建立背景图像L*a*b*用图IplImageIplImage *differenceLabImage = cvCreateImage( imageSize, IPL_DEPTH_32F, 3 );/建立差分用图IplImageIplImage *differenceLImage = cvCreateImage( imageSize, IPL_DEPTH_32F, 1 );/建立L*值差分用图IplImageIplImage *differenceAImage = cvCreateImage( imageSize, IPL_DEPTH_32F, 1 );/建立a*值差分用图Ip

58、lImageIplImage *differenceBImage = cvCreateImage( imageSize, IPL_DEPTH_32F, 1 );/建立b*值差分用图IplImageIplImage *sqrDifferenceImage = cvCreateImage( imageSize, IPL_DEPTH_32F, 1 );/建立距离计算差分用图IplImage/ currentImage和backgroundImage一起做CIE L*a*b*变换cvConvertScale( currentImage, currentLabImage, SCALE );cvConve

59、rtScale( backgroundImage, backgroundLabImage, SCALE );cvCvtColor( currentLabImage, currentLabImage, CV_BGR2Lab );cvCvtColor( backgroundLabImage, backgroundLabImage, CV_BGR2Lab );/计算距离的平方cvSub( currentLabImage, backgroundLabImage, differenceLabImage );cvPow( differenceLabImage, differenceLabImage, 2

60、);/将图像分割cvSplit(differenceLabImage,differenceLImage,differenceAImage,differenceBImage, NULL );cvCopy( differenceLImage, sqrDifferenceImage );cvAdd( differenceAImage, sqrDifferenceImage, sqrDifferenceImage );cvAdd( differenceBImage, sqrDifferenceImage, sqrDifferenceImage );cvThreshold( sqrDifferenceI

61、mage, resultImage, THRESHOLD * THRESHOLD, THRESHOLD_MAX_VALUE, CV_THRESH_BINARY );/进行阈值处理cvReleaseImage( ¤tLabImage );/解放currentLabImage内存cvReleaseImage( &backgroundLabImage );/解放backgroundLabImage内存cvReleaseImage( &differenceLabImage );/ 解放differenceLabImage内存cvReleaseImage( &differenceLImage

62、 );/解放differenceLImage内存cvReleaseImage( &differenceAImage );/解放differenceAImage内存cvReleaseImage( &differenceBImage );/解放differenceBImage内存cvReleaseImage( &sqrDifferenceImage );/解放sqrDifferenceImage内存/灰度评价/解释:/ currentImage: 当前图像IplImage / backgroundImage: 背景图像用IplImage/ resultImage: 结果图像用IplImage/void colorDifference (IplImage * currentImage , IplImage *backgroundImage, / colorD

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!