【正文】
return numberOfColors。 if ((m_pBitmapInfoHeaderbiClrUsed == 0) amp。}//返回文件名CString CDib::GetFileName(){ return m_fileName。 //計(jì)算顏色表大小 m_pData = pDib + m_pBitmapInfoHeaderbiSize + colorTableSize。//獲得堆區(qū)中的空間 ((void*)pDib,size)。 CFile dibFile(m_fileName,CFile::modeRead)。 void SaveFile(const CString filename)。 UINT GetWidth()。 // DWORD fileLength。 //調(diào)色表 BYTE* m_pData。作為一種“外部”位圖,DIB主要以文件形式進(jìn)行存儲(chǔ)和交換,所以CDib類應(yīng)該具有很好的處理文件操作。//返回位圖文件名DWORD GetSize()。根據(jù)不同的位圖,位圖信息所占的字節(jié)數(shù)也是不同的。對(duì)于16位以下的圖像,由于其位圖像素?cái)?shù)據(jù)中記錄的只是調(diào)色板的索引值,因而需要根據(jù)該索引值從調(diào)色板中取得對(duì)應(yīng)的RGB顏色。 // 位圖壓縮類型,必須是 0(不壓縮),(3033字節(jié)) // 1(BI_RLE8壓縮類型)或2(BI_RLE4壓縮類型)之一 DWORD biSizeImage。 //位圖信息頭RGBQUAD bmiColors[1]。 BMP文件結(jié)構(gòu)BMP位圖實(shí)際上就是一個(gè)像素點(diǎn)矩陣,BMP位圖文件由文件頭、位圖信息和位圖像素?cái)?shù)據(jù)等三個(gè)部分組成,如表41所示: 表41 BMP文件結(jié)構(gòu) 文件頭BITMAPFILEHEADER位圖信息BITMAPINFO位圖信息頭BITMAPINFOHEADER顏色信息表RGBQUAD位圖像素?cái)?shù)據(jù)位圖文件頭主要用于識(shí)別位圖文件,含有BMP文件的類型、文件大小和位圖起始位置等信息。BMP文件存儲(chǔ)數(shù)據(jù)時(shí),圖像的掃描方式是按從左到右、從下到上的順序。 return 0。 = 1。bfh, sizeof( bfh ), amp。 memset( amp。 if (!pBuffer)return E_POINTER。其工作模式包括兩個(gè)方面:緩沖模式和回調(diào)模式。hr = pGrabberSetMediaType(amp。if (FAILED(hr){ // Return an error.}(2)查詢過濾器的ISampleGrabber接口,并獲得其指針I(yè)SampleGrabber *pGrabber。最為簡(jiǎn)單的是通過調(diào)用過濾器圖表管理器暴露的IBasicVideo接口提供的IBasicVideo::GetCurrentImage接口函數(shù)。連接的過濾器必須支持同樣的傳輸協(xié)議,否則不能交換媒體數(shù)據(jù)。Sample是一個(gè)封裝了一定大小數(shù)據(jù)內(nèi)存的COM組件。m_pMC)。 //窗口風(fēng)格設(shè)置 if( FAILED(hr)) return hr 。首先在CCaptureVideo類中定義一個(gè)窗口句柄,用于保存視頻顯示窗口句柄:HWND m_hWnd。PIN_CATEGORY_CAPTURE,amp。MEDIATYPE_Video,m_pBF,NULL,NULL)。t build the graph))。假如第三個(gè)參數(shù)設(shè)置為NULL,則該方法自動(dòng)為過濾器圖表設(shè)置一個(gè)提交過濾器(Render Filter),并自動(dòng)根據(jù)數(shù)據(jù)流類型設(shè)置為Video Render或者DirectSound Render。Pin的連接實(shí)際上是連接雙方使用的媒體類型的一個(gè)“協(xié)商”過程。var,NULL)。 //獲取設(shè)備 while( hr = pEmNext(1,amp。 IEnumMoniker *pEm。指定某一種類型設(shè)備,參數(shù)CLSID,通過(3)然后 IEnumMoniker::Next 枚舉每一個(gè) moniker。接下來要為過濾器圖表添加各種Filter來完成模塊功能。 //創(chuàng)建IGraphBuilder接口hr=CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void**)amp。為了解決協(xié)同工作的問題,DirectShow把硬件設(shè)備設(shè)計(jì)包裝成為Filter,使之能夠工作在用戶模式下,其控制方法與普通Filter一樣,卻在內(nèi)部能夠完成與硬件驅(qū)動(dòng)程序的交互,使得DirectShow應(yīng)用程序的開發(fā)人員能夠從為硬件做特殊處理的工作中解脫出來。protected:bool BindFilter(int deviceId,IBaseFilter **pFilter)。 //濾波器鏈表管理器ICaptureGraphBuilder2 *m_pCapture。 //捕獲保存視頻HRESULT PreviewImages(int iDeviceID , HWND hWnd)。} AM_MEDIA_TYPE。 GUID subtype。(2)Transform Filter(變換過濾器):變換過濾器的工作是獲取輸入流,處理數(shù)據(jù),并產(chǎn)生輸出流,其對(duì)數(shù)據(jù)的處理包括編解碼、格式轉(zhuǎn)換、壓縮解壓縮等。Filter一般包含一個(gè)到多個(gè)的Pin組成。Microsoft DirectX是微軟公司提供的一套在Windows平臺(tái)上為創(chuàng)建游戲和其他高質(zhì)量的多媒體應(yīng)用程序而設(shè)計(jì)的一套底層應(yīng)用程序接口集。DirectShow簡(jiǎn)化了媒體回放,格式轉(zhuǎn)化和捕捉工作。DirectSetup:主要提供自動(dòng)安裝DirectX組件的API功能。DirectX標(biāo)準(zhǔn)的建立,可以為硬件開發(fā)提供測(cè)量,硬件廠商不得不按照這一標(biāo)準(zhǔn)進(jìn)行產(chǎn)品改進(jìn)。模塊二:設(shè)備無關(guān)位圖模塊(CDib類)——保存和管理單幀BMP位圖,為圖像處理提供有效支持。第二章,根據(jù)課題設(shè)計(jì)需求,簡(jiǎn)要介紹本系統(tǒng)的主要架構(gòu)和模塊。檢測(cè)系統(tǒng)設(shè)計(jì)的主要關(guān)鍵點(diǎn)有:。通過對(duì)生產(chǎn)現(xiàn)場(chǎng)的圖像收集,結(jié)合現(xiàn)代成熟的圖像處理理論和技術(shù),往往能有效地代替人類完成各種簡(jiǎn)單重復(fù)的工作,甚至在超出人類工作能力的精細(xì)、復(fù)雜的工作要求下,圖像處理技術(shù)能夠快速準(zhǔn)確地完成任務(wù)。s society, such as the medical, industrial production, live entertainment, satellite aerospace and other fields, you can see the shadow of the multimedia technology which plays an increasingly important technological role ,and bees the production and life can not be lack of tools. The project of flame height measuring of burning wire , can also be achieved by the use of multimedia technology, video, image processing.This study is around the useof video, multimedia technology, Microsoft Visual C + + image processing technology in the project of flame height measuring of burning wire. Under the Microsoft Visual C + + development environment, firstly,I plete the capture of the video stream, and stored in AVI format files, while achieving on a single frame images of realtime grab and save it as a BMP bitmap file to plete the subsequent image processing,by using the DirectShow Development Kit provided by Microsoftbased streaming media processing on the video image acquisition. Then display the obtained BMP bitmap file in the system interface,use threshold segmentation method to separate the flame from the background through the flame characteristics,and plete the measure of flame height by image processing design achieved good results in the experiment, the basic realization of the subject of the main requirements.Keywords: image processing, the Visual C + +, DirectShow, video capture, flame height目 錄摘要 IAbstract II第一章 概述 1 1 1 2第二章 灼熱絲火焰高度檢測(cè)系統(tǒng)的分析與設(shè)計(jì) 3 3(設(shè)計(jì)任務(wù)): 保存與預(yù)處理 顯示BMP圖像 3 3 3 3第三章 視頻捕獲模塊——CVideoCapture類 6 6 6 DirectShow概述 6 Filter概述 7——CVideoCapture類說明 9 10 10 17第四章 BMP圖像—CDib圖像類 23 BMP位圖概述 23 BMP文件結(jié)構(gòu) 23 23 24 位圖像素?cái)?shù)據(jù) 25 設(shè)備無關(guān)位圖類CDib類庫(kù)的建立 25 CDib類庫(kù)建立的必要 25 CDib類庫(kù)的設(shè)計(jì)目標(biāo) 26: 27—CImageProcess類 34 圖像處理技術(shù)簡(jiǎn)介 34 圖像分割技術(shù) 34 基于邊緣檢測(cè)的圖像分割 34 35 系統(tǒng)圖像分割要求與方案選擇 36 36 24位彩色位圖轉(zhuǎn)化為灰度圖 37 灰度圖的閾值分割與二值化 38 特定算法進(jìn)一步分離目標(biāo)火焰 40 火焰高度像素?cái)?shù)測(cè)量 44 高度像素比校正 45 火焰高度計(jì)算 46結(jié)束語 47參考文獻(xiàn) 48致謝 49第一章 概述隨著信息時(shí)代的到來,多媒體技術(shù)發(fā)展日新月異,特別是數(shù)字圖像處理技術(shù),在工業(yè)生產(chǎn)、醫(yī)療服務(wù)、生活?yuàn)蕵?、衛(wèi)星遙感等各個(gè)領(lǐng)域中起到了日益重要的作用,極大地豐富和推進(jìn)了人類的生產(chǎn)、生活。在如今社會(huì)的各行各業(yè),如醫(yī)療、工業(yè)生產(chǎn)、生活?yuàn)蕵?、衛(wèi)星航天等領(lǐng)域,都可以看到多媒體技術(shù)的身影,并且在其中扮演著越來越重要的技術(shù)角色,成為生產(chǎn)和生活中不可缺少的工具。本設(shè)計(jì)在試驗(yàn)中取得良好效果,基本實(shí)現(xiàn)課題主要要求。而物體的精確識(shí)別和測(cè)量是其中非常重要的一步。此時(shí)圖像處理技術(shù)提供了理想的解決方案?,F(xiàn)場(chǎng)圖像信息,是通過現(xiàn)場(chǎng)攝像頭設(shè)備進(jìn)行獲取,并傳輸?shù)絇C中待處理的。針對(duì)本設(shè)計(jì)的應(yīng)用要求,由于生產(chǎn)現(xiàn)場(chǎng)環(huán)境簡(jiǎn)單、背景單一、目標(biāo)明顯,所以運(yùn)用簡(jiǎn)單的處理技術(shù)便能取得理想的實(shí)驗(yàn)效果。 利用圖像處理技術(shù),把待處理圖像中的火焰目標(biāo)從無關(guān)的背景中準(zhǔn)確地分割和識(shí)別出來,以便下一步測(cè)量能夠準(zhǔn)確、快速地進(jìn)行。微軟的DirectX設(shè)計(jì)為“硬件設(shè)備無關(guān)性”。Direct3D:主要提供三維繪圖硬件接口,它是開發(fā)三維DirectX游戲的基礎(chǔ)。 DirectShow概述微軟DirectShow是DirectX SDK的成員之一,其前身是ActiveMovie。同時(shí)它,還具有極大的可擴(kuò)展性和靈活性,可以由用戶自己創(chuàng)建組件,并將這個(gè)組件加入DirectShow結(jié)構(gòu)中以支持新的格式或特殊的效果。DirectShow使用Filter Graph來管理Filter。Filter具有三個(gè)狀態(tài):運(yùn)行,停止,暫停。例如把視頻流和音頻流合成為一個(gè)AVi格式的字節(jié)流。 IUnknown *pUnk。 void ConfigCameraPin(HWND hwndParent)。void GrabOneFrame(BOOL bGrab)。 //寫文件濾波器CComPtr ISampleGrabber m_pGrabber。endif // !defined(AFX_CAPTUREVIDEO_H__ED45681A_5410_40B1_9439_ECB1AD042BC8__INCLUDED_)通過CVideoCapture類的對(duì)象,可以實(shí)現(xiàn)Filter Graph的創(chuàng)建,捕捉過濾器Grabber Filter的捆綁,過濾器之間的連接,以及Filter Graph數(shù)據(jù)流的管理、控制等操作。創(chuàng)建過程如下:首先分別定義兩個(gè)接口的接口指針:IGraphBuilder *m_pGB。 if(FAILED(hr)) r