




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、东南大学 仪器科学与工程学院 课程设计结课论文赖泊能基于ARM9的OpenCV火焰图像处理系统摘要:在目前的火力发电厂中,对火焰大小的控制和观测一直都是能否实现能源高效利用的关键,而为了能及时、灵敏、可靠地检测炉内燃烧工况,防止在点火、低负荷等燃烧不稳定工况下发生炉膛爆炸锅炉运行事故,电站锅炉必须配置功能齐全、性能设备可靠的炉膛安全监测系统。而炉膛安全监测系统投运可靠成功与否,在很大程度上取决于所用的火焰检测器起到关键的作用的可靠和完善。为了达到可靠快捷的目标,决定使用摄像头采集火焰燃烧情况,并对图像中的火焰光圈进行分析得到当前火焰燃烧情况。在本设计中,在硬件上,采用ARM9处理器,利用Ope
2、nCV开源视觉库对图像进行分析,从而得到火焰燃烧情况。关键字:火焰燃烧;图像处理;ARM9;OpenCV1 引言本设计的主要研究是如何实现将OpenCV移植进ARM9处理器中,并实现对火焰图像的分析,从而得出火力发电锅炉的燃烧情况。在当前的火力发电厂中,很多已经是实现了远程的监控,而能否精确稳定地分析出火焰燃烧情况,极大地影响着火焰燃烧的效率,以及火力发电厂的安全运作。为此,通过图像的采集,将能够最大地获取锅炉燃烧情况的信息,因此,本设计,采用了对火焰燃烧图像进行分析的方法来实现对锅炉燃烧情况的监控。2 系统架构本系统中,主要系统结构就是一个S3C2440的ARM9开发板,其中主要的部件就是一
3、个4.5寸的液晶显示屏。3 软硬件设计3.1 硬件设计这就是系统的设计实物图,其中板子用的是天嵌公司的TQ2440开发板,核心板是S3C2440的ARM9处理器,液晶大小为4.5寸。3.2 软件设计软件设计步骤:1,配置好一个通用的Linux内核,我用的内核版本是2.6.30.42,配置好一个带有Qt库的文件系统,以便Qt程序能够在其中运行。3,在Linux虚拟机中用QtCreator打开一张火焰的图片。4,通过加入在QtCreator集成开发环境中的OpenCV开源视觉库实现对图像的二值化,平滑处理,以及计算出光圈,并算出光圈面积的功能。5,在虚拟机上成功实现相关的功能后,就把OpenCV开
4、源视觉库交叉编译成能在ARM上运行的OpenCV库,并移植到ARM中,从而使得ARM能够调用该库实现相关的功能。6,然后将在虚拟机中编译的Qt应用程序,通过交叉编译,编译成ARM版本的应用程序,并复制到ARM中的根目录下的相应文件夹中,并且更改相应的配置使ARM能够在开机自动启动这个火焰图像处理程序。4 实验或仿真实验实验器材:硬件:TQ2440开发板软件:VMware Workstation6 虚拟机操作系统:Fedora10 集成开发环境:Qtcreator1.3 OpenCV版本:2.0.0 ARM中linux内核版本:2.6.30.4首先,程序在虚拟机中运行,在虚拟机中能够正常运行后,
5、我们再将相应的程序交叉编译到ARM中。以下这张图片是一张从监控室拍到的图像,目的只是为了能够达到辨认出火焰光圈的效果即可。原始图像为:在程序中,通过二值化处理后的图像为:对灰度图像进行平滑处理:对平滑后的灰度图像进行阈值化:对阈值化之后的图像采取闭操作:最后,以此画出闭操作之后的轮廓:紧接着,后面四张图片为虚拟机得到的各个轮廓的面积,以及轮廓个数和轮廓面积的平均值。注意:这里轮廓面积的值指的是图片中的像素值。由于在ARM开发板上实现对图像的显示要交叉移植GTK库,这个的工作量比较大,所以在该设计的过程中,我省去了这一步,简化为简单地导入图像,直接对图像分析,从而得到经过图像分析的轮廓个数,轮廓
6、面积以及所有轮廓的平均面积。下面给出实际实验效果图:对比虚拟机上产生的数据,我们可以发现,在虚拟机上做图像处理得到的数据是:共23个光圈轮廓,光圈号虚拟机ARM1939325454366664424256060648487484884242948481084953849531150320.550320.5121241.51241.5136060144242155454164242172828188.58.519222044214848221414234949平均面积169.979169.98从实验数据中,我们可以看到,虚拟机和ARM中实验出来的数据中,同样是23个光圈,每个轮廓计算出来的光圈像
7、素面积也是相同的,唯独不一样的是23个光圈的像素面积的平均值是不同的,在虚拟机中是169.979,而在ARM中的是169.98,仅仅是一个小数位的近似为题,这很好地验证了ARM中的OpenCV的移植以及图像分析功能是成功的。以此,我们就可以通过燃烧学的相关理论,通过对光圈个数,以及光圈多少,和光圈大小来判断锅炉燃烧的情况,从而安全有效地监控火力发电锅炉的正常运作。5 总结本设计主要的特点在于利用了视觉的方法来对火焰进行检测,通过视觉方法可以得到火焰燃烧情况的全方位信息,改良了一般火焰检测系统利用火焰传感器或烟雾传感器等会产生误判缺点。也从中发现,将OpenCV移植进ARM中,并在ARM中对图像
8、处理是可行的,而且分析能力除处理速度方面可能比PC机慢一些而已外,从本设计中看,ARM对图像的处理只在准确度上面与PC机略有不同。本系统虽然能完成目前的简单图像分析,但如果要求连续快速地分析图像,ARM的图像处理实时性可能满足不了。因为考虑到这个速度不够快的问题,后面若要进一步深入的开发此系统,将考虑换成ARM11或更高级的处理器来实现此设计。经过本次设计,我对ARM和文件系统都有了进一步了解,尤其对Linux操作系统的使用,有了进一步提高,而且对这种在ARM和PC之间进行交叉编译、移植等操作有了进一步的认识,也学会了这种交叉开发的技能,对自己的动手实践能力有了很大的提高。也通过这一次设计,发
9、现自己还在嵌入式开发方面还欠缺许多必要的技能,比如驱动开发的能力,为此,我将在日后进一步加强对嵌入式开发的学习。最后,我得感谢吴老师给我们提供这样一个提高和培养动手实践能力的机会,令我们在得到锻炼的同时,还开阔了眼界s。附录以下附上主要程序代码:#include widget.h#include ui_widget.h#include cv.h#include highgui.hWidget:Widget(QWidget *parent) : QWidget(parent), ui(new Ui:Widget) ui-setupUi(this);Widget:Widget() delete u
10、i;void Widget:changeEvent(QEvent *e) QWidget:changeEvent(e); switch (e-type() case QEvent:LanguageChange: ui-retranslateUi(this); break; default: break; void Widget:on_pushButton_clicked() /*=use the cam to read the image,replace the rgb_Image with frame CvCapture *capture; capture = cvCreateCameraC
11、apture(0); IplImage *frame; while(1) frame = cvQueryFrame(capture); char c=cvWaitkey(33); =*/ /read from image/ myProcess.start(/cam2jpg_2.6.30.4); IplImage *rgb_Image = cvLoadImage(fire10.jpg, CV_LOAD_IMAGE_COLOR); IplImage *gray_Image; IplImage *gray_Smooth_Image; IplImage *threshold_Image; IplIma
12、ge *morphologyEx_Image; IplImage *copy_MorphologyEx_Image; IplImage *result; IplImage *rgb_Temp; IplImage *morphologyEx_Temp; CvScalar value; CvScalar avg; CvMemStorage *g_storage = cvCreateMemStorage(0); CvSeq *contours = 0; IplImage *contours_Image; CvSize sz = cvGetSize(rgb_Image); gray_Image = c
13、vCreateImage(sz, IPL_DEPTH_8U, 1); /turn into gray gray_Smooth_Image = cvCreateImage(sz, IPL_DEPTH_8U, 1); /smooth image threshold_Image = cvCreateImage(sz, IPL_DEPTH_8U, 1); morphologyEx_Image = cvCreateImage(sz, IPL_DEPTH_8U, 1); result = cvCreateImage(sz, IPL_DEPTH_8U, 1); /matrix of result rgb_T
14、emp = cvCreateImage(sz, IPL_DEPTH_8U, 1); /all 1 matrix,protect from 0 morphologyEx_Temp = cvCreateImage(sz, IPL_DEPTH_8U, 1); copy_MorphologyEx_Image = cvCreateImage(sz, IPL_DEPTH_8U, 1); contours_Image = cvCreateImage(sz, IPL_DEPTH_8U, 1); /all 1 matrix initialize value.val0=0x1; for(int i=0;iheig
15、ht;i+) for(int j=0;jwidth;j+) cvSet2D(rgb_Temp, i, j, value); cvCvtColor(rgb_Image, gray_Image, CV_BGR2GRAY); cvSmooth(gray_Image, gray_Smooth_Image, CV_GAUSSIAN, 5, 5, 0, 0); /default method is GAUSSIAN avg = cvAvg(gray_Smooth_Image); if(avg.val0150) cvThreshold(gray_Image, threshold_Image, avg.val
16、0, 255, CV_THRESH_BINARY); else cvThreshold(gray_Image, threshold_Image, 150, 255, CV_THRESH_BINARY); cvMorphologyEx(threshold_Image, morphologyEx_Image, morphologyEx_Temp, NULL, CV_MOP_OPEN, 2); cvCopy(morphologyEx_Image, copy_MorphologyEx_Image); cvFindContours(copy_MorphologyEx_Image, g_storage,
17、&contours); cvDrawContours(contours_Image, contours, cvScalarAll(255), cvScalarAll(150), 100, 2); /gray level:while=255 black=0 CvContourScanner contour_Scanner = cvStartFindContours(copy_MorphologyEx_Image, g_storage, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0); int i=0; C
18、vSeq *present_Contour = cvFindNextContour(contour_Scanner); while(present_Contour) i+; ui-textEdit-append(tr(%1 area of contour:%2).arg(i).arg(fabs( cvContourArea(present_Contour, CV_WHOLE_SEQ) ); / coutiarea of contour: fabs( cvContourArea(present_Contour, CV_WHOLE_SEQ) )endl; present_Contour = cvF
19、indNextContour(contour_Scanner); / coutnumber of contour=iendl; / coutaverage value=avg.val0textEdit-append(tr(number of contour=%1).arg(i); ui-textEdit-append(tr(average value=%1).arg(avg.val0); cvNamedWindow(rgb_Image, CV_WINDOW_AUTOSIZE); cvNamedWindow(gray_Image, CV_WINDOW_AUTOSIZE); cvNamedWind
20、ow(gray_Smooth_Image, CV_WINDOW_AUTOSIZE); cvNamedWindow(threshold_Image, CV_WINDOW_AUTOSIZE); cvNamedWindow(morphologyEx_Image, CV_WINDOW_AUTOSIZE); cvNamedWindow(contours_Image, CV_WINDOW_AUTOSIZE); /cvNamedWindow(result_Image, CV_WINDOW_AUTOSIZE); cvShowImage(rgb_Image, rgb_Image); cvShowImage(gray_Image, gray_Image); cvShowImage(gray_Smooth_Image, gray_Smooth_Image); cvShowImage(threshold_Image, threshold_Image); cvShowImage(morphologyEx_Image, morphologyEx_Image); cvShowImage(contours_Image, contours_Image); /cvShowImage(resul
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校招笔试常用题目及答案
- 校招ai面试题库及答案
- 办公自动化中的云计算技术应用探讨
- 如何进行教育项目的成本预测与评估
- 燃气器具安全知识培训
- 2025年网络管理员考试成功秘诀及试题答案
- 商业场景下的数字化管理-以数字健康可穿戴设备为例
- 数据库技术演进考核试题及答案
- 2025年设计师考试解析试题及答案
- 法学概论的重要性对比试题及答案
- 2025年全国中学生数学奥林匹克竞赛(预赛)模拟卷(全国高中数学联赛一试)(含解析)
- 地理信息数据处理技能竞赛试题
- Unit 4 Healthy food B Lets learn(教学设计)-2024-2025学年人教PEP版(2024)英语三年级下册
- 2025届湖南省雅礼中学高三第五次模拟数学试题
- 煤矿安全绩效考核制度1
- 体育教育中的跨学科整合教学研究论文
- 高危药物外渗处理流程
- 超星尔雅学习通《创新创业(同济大学)》2025章节测试附答案
- 医院无线网络方案
- 水库安全运行管理防汛知识培训
- 基于高光谱成像的青稞品种鉴别和特征品质无损检测技术研究
评论
0/150
提交评论