摘要:針對OpenCV庫函數(shù)在Linux平臺下不能直接獲取非V4L接口的USB工業(yè)相機視頻流和IplImage結(jié)構(gòu)的圖像不能直接顯示于Qt控件中的問題,提出了一種新的解決方法:共享數(shù)據(jù)流法,并在Qt集成開發(fā)環(huán)境下完成共享數(shù)據(jù)流法的程序代碼編寫;最后通過與原有方案的實驗對比,驗證了共享數(shù)據(jù)流法的可行性和優(yōu)越性,為實現(xiàn)高速高精度機械零件檢測系統(tǒng)打下良好的基礎(chǔ)。
關(guān)鍵詞:圖像處理;OpenCV;USB工業(yè)相機;Linux
中圖分類號:TN919—34;TP319文獻標識碼:A文章編號:1004—373X(2012)18—0128—05
引言
隨著科學(xué)技術(shù)的發(fā)展,機器視覺技術(shù)日益俱進,其應(yīng)用越來越廣泛,尤其是在機械零件檢測方面,由于它具備非接觸式測量、測量精度高、測量速度快等特點,在許多場合已經(jīng)逐步代替了傳統(tǒng)測量方式[1]。而開源計算機視覺庫OpenCV是研究機器視覺必不可少的資源,因此出于成本、穩(wěn)定性、移植性、開發(fā)周期等原因,人們開始在各種平臺上運用OpenCV研究開發(fā)機器視覺應(yīng)用軟件,近些年來,基于Linux平臺較為熱門[2]。
在Linux平臺下OpenCV的使用還存在著局限性,首先是獲取視頻流函數(shù)cvCreateCameraCapture(),只支持IEEE1394和V4L接口的視頻設(shè)備(IEEE1394和V4是在linux內(nèi)核中視頻設(shè)備的API接口)。但目前支持V4L接口的USB工業(yè)相機并不多,因此采用USB工業(yè)相機的開發(fā)者,面對OpenCV的強大資源只能嘆為觀止;其次是OpenCV的Highgui庫不支持Qt的后臺開發(fā),IplImage結(jié)構(gòu)圖像不能通過函數(shù)cvShowImage()直接顯示到開發(fā)軟件控件中。針對這兩個問題,目前較為通用的解決方法就是圖像格式的轉(zhuǎn)換,這種轉(zhuǎn)換法占用較多的軟硬件資源,處理速度也較慢。因此,本文基于USB工業(yè)相機硬件平臺和Qt,OpenCV軟件平臺,提出了一種新的研究方法,并通過實驗驗證了其可行性。
1硬件系統(tǒng)平臺
本文使用的硬件平臺框架圖如圖1所示。該平臺采用德國ISD公司的UI—2440工業(yè)相機,該相機采用USB接口取代傳統(tǒng)的板卡式與上位機連接,降低成本,數(shù)據(jù)傳輸速度快,即插即用,方便操作,支持Window,Linux等操作系統(tǒng)。平臺還采用了步進電機和滾珠絲杠作為執(zhí)行機構(gòu),用戶可以準確、方便地控制工作為執(zhí)行機構(gòu),用戶可以準確、方便地控制工作臺的升降位置,從而實現(xiàn)相機物距的準確定位。在本文中主要基于該硬件平臺對圖像采集、處理與顯示的研究。
軟件應(yīng)用程序的開發(fā)是在PC機上完成的,PC機上的開發(fā)環(huán)境是Ubuntu11.10。Ubuntu操作系統(tǒng)具有源碼開放、軟件完全免費、系統(tǒng)穩(wěn)定、安全可靠、可裁剪、移植性好等顯著優(yōu)點,近些年來,越來越受到企業(yè)及個人用戶的青睞[2]。本設(shè)計還需要在Ubuntu下安裝Qt、OpenCV和ueyeSDK等軟件工具包。
本設(shè)計應(yīng)用程序主要以O(shè)penCV庫和Qt集成開發(fā)環(huán)境為核心,負責處理視頻數(shù)據(jù)采集、處理與圖像顯示。
開放源代碼的計算機圖像處理庫OpenCV(IntelOpenSourceComputerVisionLibrary)是由一些C函數(shù)和C++類所組成的庫,用來實現(xiàn)圖像處理及計算機圖像算法。OpenCV具有以下優(yōu)點:
(1)OpenCV庫為開源的免費軟件,開發(fā)者不僅可以對其源代碼進行修改,還可以添加自主研發(fā)的類庫,以提高軟件開發(fā)的靈活性,節(jié)約開發(fā)成本;
(2)OpenCV庫提供了豐富的圖像處理函數(shù),開發(fā)者無需再花大量的時間自己編寫,可以縮短開發(fā)軟件周期,提高了開發(fā)效率;
(3)OpenCV庫中大部分函數(shù)都經(jīng)過匯編優(yōu)化,基于OpenCV開發(fā)的應(yīng)用軟件具有較高的運行效率[3]。
Qt是一個跨平臺的C++圖形用戶界面應(yīng)用程序框架。它提供給應(yīng)用程序開發(fā)者建立藝術(shù)級的圖形用戶界面所需的所用功能。Qt是完全面向?qū)ο蟮模苋菀讛U展,并且允許真正地組件編程。Qt具有優(yōu)良的跨平臺特性、面向?qū)ο?、豐富的API、大量的開發(fā)文檔等優(yōu)點。本設(shè)計應(yīng)用程序主要基于Qt開發(fā)[4]。
3圖像采集與顯示關(guān)鍵技術(shù)
目前,在Linux平臺下對非V4L和IEEE1394接口的攝像設(shè)備使用OpenCV,許多學(xué)者主要以圖2中的方案(文中稱轉(zhuǎn)換法)進行處理[5]。
首先,利用相機的SDK開發(fā)包中的相關(guān)函數(shù)直接從相機中讀取圖片[6],將其轉(zhuǎn)換成IplImage結(jié)構(gòu),然后調(diào)用OpenCV相關(guān)函數(shù)進行處理,再將其轉(zhuǎn)成QImage格式在Qt控件中顯示。從采樣到顯示,圖像要經(jīng)過2次格式轉(zhuǎn)換。這樣的轉(zhuǎn)換過程,運算量增加,不但占用較多的CPU和內(nèi)存資源,而且也會使得圖像的顯示頻率降低,造成采樣數(shù)據(jù)因不能及時顯示而丟失或是降低采樣頻率來響應(yīng)顯示頻率;更重要的是在圖像轉(zhuǎn)換過程中數(shù)據(jù)流總存在著或多或少的丟失,影響原有圖片的質(zhì)量,最終降低檢測系統(tǒng)的測量精度。