基于ARM9的OpenCV火焰圖像處理系統(tǒng)_第1頁
基于ARM9的OpenCV火焰圖像處理系統(tǒng)_第2頁
基于ARM9的OpenCV火焰圖像處理系統(tǒng)_第3頁
基于ARM9的OpenCV火焰圖像處理系統(tǒng)_第4頁
基于ARM9的OpenCV火焰圖像處理系統(tǒng)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、東南大學(xué) 儀器科學(xué)與工程學(xué)院 課程設(shè)計(jì)結(jié)課論文賴泊能基于ARM9的OpenCV火焰圖像處理系統(tǒng)摘要:在目前的火力發(fā)電廠中,對(duì)火焰大小的控制和觀測一直都是能否實(shí)現(xiàn)能源高效利用的關(guān)鍵,而為了能及時(shí)、靈敏、可靠地檢測爐內(nèi)燃燒工況,防止在點(diǎn)火、低負(fù)荷等燃燒不穩(wěn)定工況下發(fā)生爐膛爆炸鍋爐運(yùn)行事故,電站鍋爐必須配置功能齊全、性能設(shè)備可靠的爐膛安全監(jiān)測系統(tǒng)。而爐膛安全監(jiān)測系統(tǒng)投運(yùn)可靠成功與否,在很大程度上取決于所用的火焰檢測器起到關(guān)鍵的作用的可靠和完善。為了達(dá)到可靠快捷的目標(biāo),決定使用攝像頭采集火焰燃燒情況,并對(duì)圖像中的火焰光圈進(jìn)行分析得到當(dāng)前火焰燃燒情況。在本設(shè)計(jì)中,在硬件上,采用ARM9處理器,利用Ope

2、nCV開源視覺庫對(duì)圖像進(jìn)行分析,從而得到火焰燃燒情況。關(guān)鍵字:火焰燃燒;圖像處理;ARM9;OpenCV1 引言本設(shè)計(jì)的主要研究是如何實(shí)現(xiàn)將OpenCV移植進(jìn)ARM9處理器中,并實(shí)現(xiàn)對(duì)火焰圖像的分析,從而得出火力發(fā)電鍋爐的燃燒情況。在當(dāng)前的火力發(fā)電廠中,很多已經(jīng)是實(shí)現(xiàn)了遠(yuǎn)程的監(jiān)控,而能否精確穩(wěn)定地分析出火焰燃燒情況,極大地影響著火焰燃燒的效率,以及火力發(fā)電廠的安全運(yùn)作。為此,通過圖像的采集,將能夠最大地獲取鍋爐燃燒情況的信息,因此,本設(shè)計(jì),采用了對(duì)火焰燃燒圖像進(jìn)行分析的方法來實(shí)現(xiàn)對(duì)鍋爐燃燒情況的監(jiān)控。2 系統(tǒng)架構(gòu)本系統(tǒng)中,主要系統(tǒng)結(jié)構(gòu)就是一個(gè)S3C2440的ARM9開發(fā)板,其中主要的部件就是一

3、個(gè)4.5寸的液晶顯示屏。3 軟硬件設(shè)計(jì)3.1 硬件設(shè)計(jì)這就是系統(tǒng)的設(shè)計(jì)實(shí)物圖,其中板子用的是天嵌公司的TQ2440開發(fā)板,核心板是S3C2440的ARM9處理器,液晶大小為4.5寸。3.2 軟件設(shè)計(jì)軟件設(shè)計(jì)步驟:1,配置好一個(gè)通用的Linux內(nèi)核,我用的內(nèi)核版本是2.6.30.42,配置好一個(gè)帶有Qt庫的文件系統(tǒng),以便Qt程序能夠在其中運(yùn)行。3,在Linux虛擬機(jī)中用QtCreator打開一張火焰的圖片。4,通過加入在QtCreator集成開發(fā)環(huán)境中的OpenCV開源視覺庫實(shí)現(xiàn)對(duì)圖像的二值化,平滑處理,以及計(jì)算出光圈,并算出光圈面積的功能。5,在虛擬機(jī)上成功實(shí)現(xiàn)相關(guān)的功能后,就把OpenCV開

4、源視覺庫交叉編譯成能在ARM上運(yùn)行的OpenCV庫,并移植到ARM中,從而使得ARM能夠調(diào)用該庫實(shí)現(xiàn)相關(guān)的功能。6,然后將在虛擬機(jī)中編譯的Qt應(yīng)用程序,通過交叉編譯,編譯成ARM版本的應(yīng)用程序,并復(fù)制到ARM中的根目錄下的相應(yīng)文件夾中,并且更改相應(yīng)的配置使ARM能夠在開機(jī)自動(dòng)啟動(dòng)這個(gè)火焰圖像處理程序。4 實(shí)驗(yàn)或仿真實(shí)驗(yàn)實(shí)驗(yàn)器材:硬件:TQ2440開發(fā)板軟件:VMware Workstation6 虛擬機(jī)操作系統(tǒng):Fedora10 集成開發(fā)環(huán)境:Qtcreator1.3 OpenCV版本:2.0.0 ARM中l(wèi)inux內(nèi)核版本:2.6.30.4首先,程序在虛擬機(jī)中運(yùn)行,在虛擬機(jī)中能夠正常運(yùn)行后,

5、我們?cè)賹⑾鄳?yīng)的程序交叉編譯到ARM中。以下這張圖片是一張從監(jiān)控室拍到的圖像,目的只是為了能夠達(dá)到辨認(rèn)出火焰光圈的效果即可。原始圖像為:在程序中,通過二值化處理后的圖像為:對(duì)灰度圖像進(jìn)行平滑處理:對(duì)平滑后的灰度圖像進(jìn)行閾值化:對(duì)閾值化之后的圖像采取閉操作:最后,以此畫出閉操作之后的輪廓:緊接著,后面四張圖片為虛擬機(jī)得到的各個(gè)輪廓的面積,以及輪廓個(gè)數(shù)和輪廓面積的平均值。注意:這里輪廓面積的值指的是圖片中的像素值。由于在ARM開發(fā)板上實(shí)現(xiàn)對(duì)圖像的顯示要交叉移植GTK庫,這個(gè)的工作量比較大,所以在該設(shè)計(jì)的過程中,我省去了這一步,簡化為簡單地導(dǎo)入圖像,直接對(duì)圖像分析,從而得到經(jīng)過圖像分析的輪廓個(gè)數(shù),輪廓

6、面積以及所有輪廓的平均面積。下面給出實(shí)際實(shí)驗(yàn)效果圖:對(duì)比虛擬機(jī)上產(chǎn)生的數(shù)據(jù),我們可以發(fā)現(xiàn),在虛擬機(jī)上做圖像處理得到的數(shù)據(jù)是:共23個(gè)光圈輪廓,光圈號(hào)虛擬機(jī)ARM1939325454366664424256060648487484884242948481084953849531150320.550320.5121241.51241.5136060144242155454164242172828188.58.519222044214848221414234949平均面積169.979169.98從實(shí)驗(yàn)數(shù)據(jù)中,我們可以看到,虛擬機(jī)和ARM中實(shí)驗(yàn)出來的數(shù)據(jù)中,同樣是23個(gè)光圈,每個(gè)輪廓計(jì)算出來的光圈像

7、素面積也是相同的,唯獨(dú)不一樣的是23個(gè)光圈的像素面積的平均值是不同的,在虛擬機(jī)中是169.979,而在ARM中的是169.98,僅僅是一個(gè)小數(shù)位的近似為題,這很好地驗(yàn)證了ARM中的OpenCV的移植以及圖像分析功能是成功的。以此,我們就可以通過燃燒學(xué)的相關(guān)理論,通過對(duì)光圈個(gè)數(shù),以及光圈多少,和光圈大小來判斷鍋爐燃燒的情況,從而安全有效地監(jiān)控火力發(fā)電鍋爐的正常運(yùn)作。5 總結(jié)本設(shè)計(jì)主要的特點(diǎn)在于利用了視覺的方法來對(duì)火焰進(jìn)行檢測,通過視覺方法可以得到火焰燃燒情況的全方位信息,改良了一般火焰檢測系統(tǒng)利用火焰?zhèn)鞲衅骰驘熿F傳感器等會(huì)產(chǎn)生誤判缺點(diǎn)。也從中發(fā)現(xiàn),將OpenCV移植進(jìn)ARM中,并在ARM中對(duì)圖像

8、處理是可行的,而且分析能力除處理速度方面可能比PC機(jī)慢一些而已外,從本設(shè)計(jì)中看,ARM對(duì)圖像的處理只在準(zhǔn)確度上面與PC機(jī)略有不同。本系統(tǒng)雖然能完成目前的簡單圖像分析,但如果要求連續(xù)快速地分析圖像,ARM的圖像處理實(shí)時(shí)性可能滿足不了。因?yàn)榭紤]到這個(gè)速度不夠快的問題,后面若要進(jìn)一步深入的開發(fā)此系統(tǒng),將考慮換成ARM11或更高級(jí)的處理器來實(shí)現(xiàn)此設(shè)計(jì)。經(jīng)過本次設(shè)計(jì),我對(duì)ARM和文件系統(tǒng)都有了進(jìn)一步了解,尤其對(duì)Linux操作系統(tǒng)的使用,有了進(jìn)一步提高,而且對(duì)這種在ARM和PC之間進(jìn)行交叉編譯、移植等操作有了進(jìn)一步的認(rèn)識(shí),也學(xué)會(huì)了這種交叉開發(fā)的技能,對(duì)自己的動(dòng)手實(shí)踐能力有了很大的提高。也通過這一次設(shè)計(jì),發(fā)

9、現(xiàn)自己還在嵌入式開發(fā)方面還欠缺許多必要的技能,比如驅(qū)動(dòng)開發(fā)的能力,為此,我將在日后進(jìn)一步加強(qiáng)對(duì)嵌入式開發(fā)的學(xué)習(xí)。最后,我得感謝吳老師給我們提供這樣一個(gè)提高和培養(yǎng)動(dòng)手實(shí)踐能力的機(jī)會(huì),令我們?cè)诘玫藉憻挼耐瑫r(shí),還開闊了眼界s。附錄以下附上主要程序代碼:#include "widget.h"#include "ui_widget.h"#include "cv.h"#include "highgui.h"Widget:Widget(QWidget *parent) : QWidget(parent), ui(new Ui:W

10、idget) ui->setupUi(this);Widget:Widget() delete ui;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_Im

11、age with frame CvCapture *capture; capture = cvCreateCameraCapture(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);

12、IplImage *gray_Image; IplImage *gray_Smooth_Image; IplImage *threshold_Image; IplImage *morphologyEx_Image; IplImage *copy_MorphologyEx_Image; IplImage *result; IplImage *rgb_Temp; IplImage *morphologyEx_Temp; CvScalar value; CvScalar avg; CvMemStorage *g_storage = cvCreateMemStorage(0); CvSeq *cont

13、ours = 0; IplImage *contours_Image; CvSize sz = cvGetSize(rgb_Image); gray_Image = cvCreateImage(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, IP

14、L_DEPTH_8U, 1); result = cvCreateImage(sz, IPL_DEPTH_8U, 1); /matrix of result rgb_Temp = 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 = cvCreateIm

15、age(sz, IPL_DEPTH_8U, 1); /all 1 matrix initialize value.val0=0x1; for(int i=0;i<rgb_Temp->height;i+) for(int j=0;j<rgb_Temp->width;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); /defau

16、lt method is GAUSSIAN avg = cvAvg(gray_Smooth_Image); if(avg.val0>150) cvThreshold(gray_Image, threshold_Image, avg.val0, 255, CV_THRESH_BINARY); else cvThreshold(gray_Image, threshold_Image, 150, 255, CV_THRESH_BINARY); cvMorphologyEx(threshold_Image, morphologyEx_Image, morphologyEx_Temp, NULL,

17、 CV_MOP_OPEN, 2); cvCopy(morphologyEx_Image, copy_MorphologyEx_Image); cvFindContours(copy_MorphologyEx_Image, g_storage, &contours); cvDrawContours(contours_Image, contours, cvScalarAll(255), cvScalarAll(150), 100, 2); /gray level:while=255 black=0 CvContourScanner contour_Scanner = cvStartFind

18、Contours(copy_MorphologyEx_Image, g_storage, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0); int i=0; CvSeq *present_Contour = cvFindNextContour(contour_Scanner); while(present_Contour) i+; ui->textEdit->append(tr("%1 area of contour:%2").arg(i).arg(fabs( cvCon

19、tourArea(present_Contour, CV_WHOLE_SEQ) ); / cout<<i<<"area of contour: "<<fabs( cvContourArea(present_Contour, CV_WHOLE_SEQ) )<<endl; present_Contour = cvFindNextContour(contour_Scanner); / cout<<"number of contour="<<i<<endl; / cout<

20、<"average value="<<avg.val0<<endl; ui->textEdit->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"

21、;, CV_WINDOW_AUTOSIZE); cvNamedWindow("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(&

22、quot;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("result_Image", result); cvWaitKey(); cvReleaseImage(&rgb_Image

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論