技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 基于1394總線的工業(yè)相機圖像采集程序設(shè)計

基于1394總線的工業(yè)相機圖像采集程序設(shè)計

時間:2009-12-11 10:30:37來源:limin

導(dǎo)語:?通過對目前兩種圖像采集方法的比較,指出以數(shù)碼相機組合PC機進行圖像采集的優(yōu)點。同時,在分析了IEEE1394總線標(biāo)準(zhǔn)的功能和特點后,揭示了1394總線在圖像采集方面的優(yōu)越性能。
[b]0 引言 [/b] 目前,以CCD技術(shù)為核心的圖像獲取設(shè)備可以分為兩類: 1)由CCD攝像頭、圖像采集卡和計算機組成的圖像采集系統(tǒng),利用圖像采集卡把CCD傳來的模擬圖像信號轉(zhuǎn)換為數(shù)字圖像信號并傳送給計算機處理; 2)由CCD相機本身帶有的數(shù)字化設(shè)備直接將數(shù)字圖像信號通過端口傳送給計算機。 其中前者作為經(jīng)典的圖像采集系統(tǒng)在圖像采集的應(yīng)用中一直居于主導(dǎo)地位[1],但是,性能較好的采集卡價格昂貴,同時由于需求不同,常常需要對采集卡進行二次開發(fā),而大多采集卡生產(chǎn)廠家封裝了自己的函數(shù)和鏈接庫,因此在二次開發(fā)時對開發(fā)人員的專業(yè)素質(zhì)要求較高。近年來隨著CCD相機技術(shù)的不斷進步,以數(shù)碼相機為代表的第二類圖像采集設(shè)備以其方便快捷、采集速度快、高分辨率、高性價比等特點受到人們的廣泛關(guān)注,已經(jīng)在一些領(lǐng)域取得了很好的應(yīng)用。 對于第二類圖像采集設(shè)備,因為是CCD相機直接提供數(shù)字信號,因此可以獲得高品質(zhì)的圖像,但同時,也對圖像數(shù)據(jù)的傳輸速率提出了較高的要求。一般CCD輸出可以遵循RS-422、RS-644和IEEE1394等數(shù)字輸出接口標(biāo)準(zhǔn)。其中,RS-422的數(shù)據(jù)傳輸速率比較低,不能滿足大量圖像數(shù)據(jù)傳輸?shù)囊螅欢鳵S-644在進行傳輸數(shù)據(jù)時,必須外加圖像采集卡,這樣就增加了整個系統(tǒng)的造價。而IEEE1394不僅能夠提供高速的數(shù)據(jù)速率,克服RS-422數(shù)據(jù)傳輸速率低的缺點,同時在和CCD相連的時候不需要外加圖像采集卡[2]。 IEEE1394,又稱FireWire(火線),是1987年Apple公司發(fā)布的一個高速串行總線標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)在1995年被電氣與電子工程師協(xié)會(IEEE)采納,稱之為IEEE1394。1995年的IEEE1394-1995其數(shù)據(jù)傳輸率為100/200/400Mbps,后來其改進版IEEE1394b的數(shù)據(jù)傳輸率可達到800Mbps,1.6Gbps及3.2Gbps。所以,IEEE1394總線是目前為止最快的串行總線[3]。IEEE1394總線具有如下特點:(1)數(shù)字接口:數(shù)據(jù)以數(shù)字形式傳輸,不需數(shù)模轉(zhuǎn)換,從而降低了設(shè)備的復(fù)雜性,保證了信號的質(zhì)量;(2)即插即用;(3) 速度快,支持同步和異步兩種數(shù)據(jù)傳輸模式;(4) 物理體積小,制造成本低,易于安裝;(5) 價廉?;谶@些特點,1394被廣泛應(yīng)用于多媒體領(lǐng)域,特別是數(shù)碼攝像機。 目前,接觸最多的是對圖像采集卡的編程控制,而關(guān)于利用第二類圖像采集設(shè)備進行圖像采集時的編程方法介紹很少。因此,本文著重闡述在VC++平臺下應(yīng)用基于1394接口的第二類圖像采集設(shè)備進行圖像采集的編程過程。 1 圖像采集系統(tǒng)的硬件組成及開發(fā)平臺 本文中圖像采集的硬件組成:工業(yè)數(shù)碼相機,1394b卡和PC機。在PC機主機的空余PCI插槽上安裝上系統(tǒng)所需的1394b卡,通過1394接口把相機在PC機并安裝驅(qū)動程序,這樣,本系統(tǒng)所需要的硬件環(huán)境就完成了。 使用的系統(tǒng)平臺時Windows 2000,開發(fā)環(huán)境時Microsoft VC++6.0。 [b]2 圖像采集的實現(xiàn) [/b] 圖像采集系統(tǒng)的編寫,主要內(nèi)容包括:人機交互界面、從CCD相機接收圖像信號并保存、圖像在采集界面顯示及對相機的控制。以下將對其逐一闡述。 2.1 建立采集界面 對于采集界面,可以創(chuàng)建為對話框形式,也可以采用文檔結(jié)構(gòu),本文采用后者: 1)生成一個MFC AppWizard(exe)多文檔應(yīng)用程序框架(應(yīng)用程序名稱:PictureTest)。 2)連接相機的動態(tài)鏈接庫(因為要控制相機采圖,所以會用到相機的庫函數(shù))。找到相機安裝的目錄文件,把include文件夾的文件路徑加入到Project->Setting->C/C++->;preprocessor->Additional include directories的編輯框中;把lib文件夾的文件路徑加入到Project->Setting->Link->Input->Additional library path的編輯框中,同時在…->Input->Object/library modules編輯框中輸入pgrflycapture.lib pgrflycapturegui.lib。 3)包含相機控制類的頭文件,在工程中的CPictureTestDoc.h文件中加入頭文件: #include #include 并定義共有變量: FlyCaptureContext context; //相機功能句柄 CameraGUIContext m_guicontext; //圖形用戶界面(GUI)句柄 4)用相機采圖時,首先需要對其初始化,這部分工作我們希望在應(yīng)用程序打開時由系統(tǒng)自己完成。在工程中的CPictureTestDoc.cpp文件中對相機進行初始化: 首先,在構(gòu)造函數(shù)中對定義的功能句柄初始化: context=NULL; //相機功能句柄初始化 m_guicontext=NULL; //圖像用戶界面句柄初始化 然后,在OnNewDocument()函數(shù)中連接相機并初始化: flycaptureCreateContext( &context );//連接相機 guierror=pgrcamguiCreateContext( &m_guicontext );//創(chuàng)建GUI連接 flycaptureInitialize( context, _CAMERA_INDEX );//相機初始化 2.2 圖像抓取 在一些自動化系統(tǒng)中,可能在多處用到抓圖代碼,因此為增強程序的可讀性,減少編程代碼,我們編寫一個功能函數(shù),由它來完成抓圖并保存功能,這樣在需要的時候,直接調(diào)用函數(shù)即可。在CPictureTestDoc.cpp文件中加入功能函數(shù)PictureGrab(),用它來實現(xiàn)圖像抓取,其核心代碼如下: flycaptureStart( context, FLYCAPTURE_VIDEOMODE_ANY, FLYCAPTURE_FRAMERATE_ANY );//相機開啟,其中三個參數(shù)分別為:相機功能句柄,視頻模式,幀頻 flycaptureGrabImage2( context, &image );//抓圖,image是圖像在內(nèi)存中的存放地址 flycaptureConvertImage( context, &image, &imageConverted );//圖像格式轉(zhuǎn)換,imageConverted為轉(zhuǎn)換后圖像在內(nèi)存中的地址 flycaptureSaveImage(context,&imageConverted,("TestPicture.bmp"),SAVE_FORMAT_C );//保存圖像,TestPicture.bmp為圖像保存名稱,SAVE_FORMAT_C為圖像保存格式,即BMP格式 flycaptureStop( context );//停止相機 通過上述程序抓到的圖像,保存在本工程文件夾中,這樣,在后續(xù)的圖像處理時,可以在程序中直接通過文件名訪問圖像文件,而不需要添加路徑,簡化了程序代碼。 2.3 圖像顯示 Windows位圖由兩種:DDB和DIB。前者依賴于設(shè)備(Device Dependent Bitmap),與MFC 6.0中的CBitmap類相對應(yīng),它們在內(nèi)存中的結(jié)構(gòu)和位置依賴于管理它們的設(shè)備驅(qū)動。DIB是一種“格式”,它可以存放在內(nèi)存中,也可以存儲成文件,即常見的BMP文件。Visual C++的MFC中,以CBitmap類代表DDB圖像,極大地方便了編程人員對DDB的使用。然而通常情況下,沒有人會把DDB圖像存儲成文件,因此我們使用更多的是DIB,遺憾的是MFC對于DIB的支持幾乎可以說是沒有,因此在編制圖像處理的程序時,有必要設(shè)計可以重復(fù)使用的類CDib,專門用來處理DIB[4](關(guān)于CDib,讀者可以參閱相關(guān)書目,本文不再累述)。本文中,為了方便后續(xù)的圖像處理,在圖像顯示時采用類CDib技術(shù)。因為在實際應(yīng)用中,我們往往需要圖像的連續(xù)讀入,因此本文直接采用文件名讀入圖像,這樣可以使采集的圖像實時的顯示。 首先,定義類CDib,并在CPictureTestDoc.h中定義共有變量: CDib m_dib;//CDib類對象,用于位圖文件的讀寫 然后,在CPictureTestDoc.cpp文件中添加功能函數(shù):PictureRead(),在其中加入代碼: CString strPathName; strPathName = _T("TestPicture.bmp"); if (m_dib.Read(strPathName) == TRUE) { SetModifiedFlag(FALSE); // start off with unmodified return ; } 并在CPictureTestView.cpp文件中的OnDraw(CDC* pDC)函數(shù)中,加入如下代碼: CPictureTestDoc* pDoc = GetDocument(); CDib *pDib=pDoc->GetPDib();//返回m_dib的指針 CSize sizeFileDib = pDib->GetDimensions();//獲取DIB的尺寸 pDib->Draw(pDC, CPoint(0, 0), sizeFileDib); //顯示DIB 在OnInitialUpdate()函數(shù)中設(shè)置滾動窗口: CDib *pDib=pDoc->GetPDib();//獲取DIB的指針 if(pDib!=NULL) SetScrollSizes(MM_TEXT, pDib->GetDimensions());//根據(jù)DIB尺寸設(shè)置視窗大小 最后,添加圖像采集命令菜單,其響應(yīng)函數(shù)為: void CPictureTestView::OnTestStart() {   CPictureTestDoc * pDoc = GetDocument();   pDoc->;pictureGrab ();//抓圖   pDoc->;pictureRead();//把圖像讀入內(nèi)存   OnInitialUpdate();//設(shè)置滾動窗口 } 編譯通過后,單擊圖像采集命令,即可實時獲取圖像。
[align=center]圖1 圖像采集實例 Fig.1 The example of image acquisition[/align] 2.4 相機設(shè)置 在圖像采集時,我們往往需要對相機的參數(shù)如圖像格式、分辨率、幀頻等進行設(shè)定,同時,為了獲取高品質(zhì)圖像,我們還需要做白平衡調(diào)節(jié)。當(dāng)然,這些參數(shù)的設(shè)定我們可以在相機初始化時由代碼實現(xiàn),但是,在實際應(yīng)用中,為了達到最佳效果,我們需要多次調(diào)試才能達成,如果采用修改代碼的方法,調(diào)試過程會很麻煩。數(shù)碼相機一般都有設(shè)置菜單,我們要做的就是,通過代碼來調(diào)用相機的設(shè)置菜單,設(shè)置好參數(shù)后,參數(shù)會自動保存并加載。這樣,調(diào)試的時候會方便很多。創(chuàng)建相機設(shè)置菜單命令,其響應(yīng)函數(shù)如下: void CPictureTestDoc::OnTestCameraset() { pgrcamguiToggleSettingsWindowState( m_guicontext, AfxGetApp()->m_pMainWnd->GetSafeHwnd() );//相機設(shè)置對話框 }
[align=center]圖2 相機參數(shù)設(shè)置界面 Fig.2 Fig. 4.2 Interface for setting the parameter of the camera[/align] 3 結(jié) 論 本文實現(xiàn)的圖像采集系統(tǒng)可通過1394接口對數(shù)碼機進行格式/模式/幀率的設(shè)置,光學(xué)參數(shù)的設(shè)定,采集畫面的實時顯示,而且能夠?qū)z像機進行自動控制,系統(tǒng)穩(wěn)定可靠,利用它可以完成一些復(fù)雜項目中的實時連續(xù)的圖像采集過程,如高速公路車輛和車牌的自動識別管理系統(tǒng)、工業(yè)生產(chǎn)中的產(chǎn)品外包裝檢測系統(tǒng)等,具有很大的實用性 致 謝 感謝我的導(dǎo)師徐志祥副教授在本論文的撰寫過程中給予的指導(dǎo)。 參 考 文 獻 [1] 閆守成,全厚德,李擎.Windows環(huán)境下的數(shù)字圖像采集技術(shù)研究.微計算機信息,2006,2(1):252-254. [2] 畢美華,劉文文. 基于VC++6.0的IEEE1394 CCD應(yīng)用程序開發(fā). 現(xiàn)代顯示, 2009,3:38-42. [3] 劉義先,宋申民,陳興林,強文義.基于IEEE1394總線的圖像采集處理系統(tǒng)實現(xiàn).控制工程,2006,13:110-115. [4] 陳?。甐isual C/C++ 編程精選集錦-在Visual C++中實現(xiàn)設(shè)備無關(guān)位圖類CDib.北京:科學(xué)出版社,2003. Programming of Image Acquisition with Industrial Camera Based on 1394 Bus LI Xiao-feng ,XU Zhi-xiang (School of Mechanical Engineering, Dalian University of Technology, Dalian 116024,China) Abstract: Through comparisons of two image acquisition methods at present, the advantages of combining digital camera with PC to grab image are pointed out. Meanwhile, the paper reveals that IEEE1394 bus has superior performances in image acquisition after analyzing the functions and characteristics of IEEE1394 standard. For this, the programming method and skill to grab image by using device with 1394 digital interface are introduced through concrete examples. Key words: IEEE1394; VC++; DIB; image acquisition

標(biāo)簽:

點贊

分享到:

上一篇:變頻調(diào)速節(jié)能量的計算方法

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(www.treenowplaneincome.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權(quán)法律責(zé)任。

相關(guān)資訊

網(wǎng)站簡介|會員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號