專利名稱:一種基于Labview的高速圖像采集方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種圖像采集技術(shù),特別涉及一種基于Labview的高速圖像采集方法。
背景技術(shù):
在工業(yè)檢測領(lǐng)域,電子檢測技術(shù)已經(jīng)逐步取代傳統(tǒng)人工檢測方法,其中圖像處理技術(shù)發(fā)展尤為迅猛。將計(jì)算機(jī)的高速性、可靠性和可重復(fù)性與圖像處理技術(shù)相結(jié)合進(jìn)行視覺檢測,具有自動(dòng)化、非接觸、高精度和高速等特點(diǎn),可極大提高檢測效率。隨著工業(yè)檢測要求的不斷提高,圖像處理技術(shù)的硬件設(shè)備也在不斷地升級(jí)更新。圖像采集卡采用PCI-E 高速總線接口,相較于PCI總線接口,能大幅提升圖像傳輸以及采集的速率。工業(yè)攝像頭的分辨率以及幀速也隨之發(fā)展得到了大幅提高,性能指標(biāo)也更加穩(wěn)定、可靠。LabVIEW是由美國國家儀器(National Instruments)提供的一款圖形化編程軟件,其結(jié)合虛擬儀器技術(shù)可以快速開發(fā)測試程序,具備良好的工業(yè)檢測設(shè)備接口和涵蓋視覺、運(yùn)動(dòng)控制、嵌入式開發(fā)、總線通訊等強(qiáng)大的功能模塊,廣泛應(yīng)用于工業(yè)測控領(lǐng)域。DALSA公司所生產(chǎn)FA-21-1M120-00-R型號(hào)的高速攝像頭達(dá)到1024*1024的分辨率,每秒120幀的高速圖像采集幀速,在視覺檢測中具有良好的性能,并且提供C++、dotNet 函數(shù)開發(fā)包,利于根據(jù)檢測要求進(jìn)行二次開發(fā)。但是沒有專門針對(duì)LabVIEW的程序驅(qū)動(dòng)接口,不能被LabVIEW直接應(yīng)用,所以需要用戶開發(fā)與之兼容的驅(qū)動(dòng)程序。
發(fā)明內(nèi)容
本發(fā)明是針對(duì)現(xiàn)在高速圖像采集驅(qū)動(dòng)應(yīng)用技術(shù)跟不上的問題,提出了一種基于 Labview的高速圖像采集方法,采用DALSA公司提供的Sapera++ LT函數(shù)開發(fā)包,編寫DLL 動(dòng)態(tài)鏈接庫由LabVIEW調(diào)用,完成對(duì)高速攝像頭FA-21-1M120-00-R的圖像采集以及實(shí)時(shí)控制。本發(fā)明的技術(shù)方案為一種基于Labview的高速圖像采集方法,其特征在于,包括高速攝像頭、圖像采集卡以及工控機(jī),高速攝像頭通過專用的圖像采集線纜與圖像采集卡連接,圖像采集卡裝在工控機(jī)上,工控機(jī)采集包括如下具體步驟
O創(chuàng)建結(jié)構(gòu)體數(shù)組allimaq[BUFSIZE],其中包括*pBuffer指針用于存放圖像地址, i_full布爾型變量用于判斷是否存取圖像,其中宏定義BUFSIZE為需要存放圖像的內(nèi)存數(shù)量,初始化整型變量ai,aj=0,其中ai為回調(diào)函數(shù)的圖像存取序號(hào),aj為圖像存入內(nèi)存序號(hào);
2)配置采集信息包括連接圖像采集卡,選擇與圖像采集卡連接的高速攝像頭,調(diào)用外部ccf文件配置高速攝像頭各個(gè)采集參數(shù);
3)創(chuàng)建圖像緩存空間,判斷是否開始采集圖像;
4)開始采集圖像,判斷allimaq[aj]·i_full的狀態(tài)是否為true,若是,說明新的一中貞圖像已經(jīng)采集完畢,可以進(jìn)行傳輸操作;同時(shí)把a(bǔ)llimaq[aj].pBuff中的圖像數(shù)據(jù)輸出,使allimaq[aj]. i_full為false,并aj++ ;否則,說明新的圖像還未采集到;
5)當(dāng)停止拍攝時(shí),釋放配置圖像采集卡、高速攝像頭以及所創(chuàng)建的圖像數(shù)組的內(nèi)存空
間;
6)每次拍攝一幀圖像時(shí),程序會(huì)自動(dòng)轉(zhuǎn)入回調(diào)函數(shù)中,進(jìn)行圖像的存儲(chǔ)操作,包括如下步驟
A:將采集到的圖像放入圖像緩存中;
B :圖像緩存中所存儲(chǔ)的圖像,傳遞至allimaq[ai]. pBuff中;
C :清除及釋放圖像緩存;
D :ai++ ;
7)步驟6)結(jié)束后,譯生成DLL動(dòng)態(tài)鏈接庫,包括初始化函數(shù)(DALSA_Init)、開始拍攝函數(shù)(DALSA_Start)、采集圖像函數(shù)(DALSA_Snap )、停止拍攝函數(shù)(DALSA_Stop ),使用 LabVIEW的Call Library Function Node調(diào)用上述DLL動(dòng)態(tài)鏈接庫的函數(shù),完成對(duì)高速攝像頭的圖像采集及控制,具體步驟包括如下
I)調(diào)用DALSA_Init函數(shù),初始化高速攝像頭、圖像采集卡,創(chuàng)建一維圖像數(shù)組,數(shù)組長度為1048576,創(chuàng)建圖像緩存;
II)調(diào)用DALSA_Start函數(shù),開始進(jìn)入拍攝狀態(tài);
III)調(diào)用DALSA_Snap采集圖像函數(shù),將輸出的一維圖像數(shù)組轉(zhuǎn)換為二維圖像數(shù)組,轉(zhuǎn)換后的二維圖像數(shù)組大小為1024*1024,通過LabVIEW的Vision模塊的IMAQ ArrayToImage. Vi將二維圖像數(shù)組以圖像形式顯示;
IV)調(diào)用DALSA_Stop函數(shù),停止拍攝,清理釋放所占用的內(nèi)存空間。本發(fā)明的有益效果在于本發(fā)明基于Labview的高速圖像采集方法,通過LabVIEW 本高速圖像采集驅(qū)動(dòng)程序完成了高速攝像頭對(duì)圖像的采集及對(duì)高速攝像頭各參數(shù)的設(shè)置, 具有聞速、實(shí)時(shí)、穩(wěn)定的優(yōu)點(diǎn)。
圖I是本發(fā)明基于Labview的高速圖像采集方法中高速圖像采集驅(qū)動(dòng)程序的硬件結(jié)構(gòu)框圖2是本發(fā)明基于Labview的高速圖像采集方法中DLL動(dòng)態(tài)鏈接庫的軟件流程圖3是本發(fā)明基于Labview的高速圖像采集方法中DLL動(dòng)態(tài)鏈接庫中回調(diào)函數(shù)的軟件流程圖4是本發(fā)明基于Labview的高速圖像采集方法中LabVIEW調(diào)用DLL動(dòng)態(tài)鏈接庫函數(shù)的軟件流程圖。
具體實(shí)施例方式本發(fā)明利用DALSA公司提供的高速攝像頭、圖像采集卡以及提供的C++函數(shù)開發(fā)包Sapera++ LT,編譯生成DLL動(dòng)態(tài)鏈接庫,通過上層LabVIEW調(diào)用,實(shí)現(xiàn)高速攝像頭的采集及控制。如圖I所示硬件結(jié)構(gòu)框圖,其包括高速攝像頭、圖像采集卡以及工控機(jī),所述高速攝像頭型號(hào)為FA-21-1M120-00-R,連接所述圖像采集卡。所述的圖像采集卡型號(hào)為x64-Xcelera-CL LX1,并與所述的高速攝像頭兼容,通過專用的圖像采集線纜連接。所述的工控機(jī)安裝有所述的圖像采集卡,完成程序控制。如圖2所示DLL動(dòng)態(tài)鏈接庫的軟件流程圖,具體的運(yùn)行步驟如下
1)創(chuàng)建結(jié)構(gòu)體數(shù)組allimaq[BUFSIZE],其中包括*pBuffer指針用于存放圖像地址, 布爾型變量用于判斷是否存取圖像,其中宏定義BUFSIZE為需要存放圖像的內(nèi)存數(shù)
量,初始化整型變量ai,aj=0,其中ai為回調(diào)函數(shù)的圖像存取序號(hào),aj為圖像存入內(nèi)存序號(hào);
2)配置采集信息包括連接圖像采集卡,選擇與圖像采集卡連接的高速攝像頭,調(diào)用外部ccf文件配置高速攝像頭各個(gè)采集參數(shù);
3)創(chuàng)建圖像緩存空間,判斷是否開始采集圖像;
4)開始采集圖像,判斷allimaq[aj].i_full的狀態(tài)是否為true,若是,說明新的一中貞圖像已經(jīng)采集完畢,可以進(jìn)行傳輸操作;同時(shí)把a(bǔ)llimaq[aj].pBuff中的圖像數(shù)據(jù)輸出,使 allimaq[aj]. i_full為false,并aj++ ;否則,說明新的圖像還未采集到;
5)當(dāng)停止拍攝時(shí),釋放配置圖像采集卡、高速攝像頭以及所創(chuàng)建的圖像數(shù)組的內(nèi)存空間。其中主要包括初始化函數(shù)(DALSA_Init)、開始拍攝函數(shù)(DALSA_Start)、采集圖像函數(shù)(DALSA_Snap)、停止拍攝函數(shù)(DALSA_Stop)。核心代碼如下
void Dalsa_Init (char* path_name)//初始化函數(shù)
for (i=0; i<FRAMESIZE; i++)// 初始化結(jié)構(gòu)體數(shù)組
{
allimaq[i]. pBuffer= new BYTE[1024*1024]; allimaq[i]. i_full=false;
Acq->Create (); Buffers->Create() Xfer->Create ();
void Dalsa_Start(void)
分配圖像采集設(shè)備底層資源創(chuàng)建圖像采集緩存空間創(chuàng)建圖像傳輸通道
Il開始拍攝函數(shù)
Xfer->Grab ()
采集圖像
void Dalsa_Snap(BYTE氺 disimage)
for (i=0;i<1024;i++) for (j=0;j<1024;j++)
采集圖像函數(shù)
disimage [i*1024+j] = allimaq[aj]. pBuffer [i* 1024+j] //米集圖像void Dalsa_Stop(void)
停止拍攝函數(shù)
Xfer->DestroyO ; Buffers->Destroy(); Acq->Destroy(); delete[] arrbuf; for (i=0;i<BUFSIZE;i++)
釋放傳輸通道
Il釋放圖像緩存空間釋放圖像采集設(shè)備內(nèi)存空間 //清除釋放圖像數(shù)組清除釋放結(jié)構(gòu)體數(shù)組
delete [] allimaq[i]. pBuffer;
如圖3所示回調(diào)函數(shù)的軟件流程圖,具體的運(yùn)行步驟如下
1)將采集到的圖像放入圖像緩存中;
2)圖像緩存中所存儲(chǔ)的圖像,傳遞至allimaq[ai].pBuff中
3)清除釋放圖像緩存;
4)ai++。主要的核心代碼如下
static void myCallback(SapXferCalIbackInfo 氺plnfo)
Buffers->GetAddress (ai, O, 1024*1024,(void**)&imaqbuf) memcpy(allimaq[ai]· pBuff, imaqbuf, 1024*1024);
Buffers->ReIeaseAddress((void*)imaqbuf);
allimaq[ai]. i_full=true;
ai++;
if (ai==BUFSIZE) {ai=0;}
Il回調(diào)函數(shù)
//將圖像放入緩存將緩存中圖像導(dǎo)出釋放緩存
如圖4所示LabVIEW調(diào)用DLL動(dòng)態(tài)鏈接庫函數(shù)的軟件代碼,具體的運(yùn)行步驟如下
1)調(diào)用DALSA_Init函數(shù),初始化高速攝像頭、圖像采集卡,創(chuàng)建一維圖像數(shù)組,數(shù)組長度為1048576,以及創(chuàng)建圖像緩存;
2)調(diào)用DALSA_Start函數(shù),開始進(jìn)入拍攝狀態(tài);
3)調(diào)用DALSA_Snap采集圖像函數(shù),將輸出的一維圖像數(shù)組轉(zhuǎn)換為二維圖像數(shù)組,轉(zhuǎn)換后的二維圖像數(shù)組大小為1024*1024,通過LabVIEW的Vision模塊的IMAQ ArrayToImage. Vi將二維圖像數(shù)組以圖像形式顯示;
4)調(diào)用DALSA_Stop函數(shù),停止拍攝,清理釋放所占用的所有內(nèi)存空間。
權(quán)利要求
1.一種基于Labview的高速圖像采集方法,其特征在于,包括高速攝像頭、圖像采集卡以及工控機(jī),高速攝像頭通過專用的圖像采集線纜與圖像采集卡連接,圖像采集卡裝在工控機(jī)上,工控機(jī)采集包括如下具體步驟O創(chuàng)建結(jié)構(gòu)體數(shù)組allimaq[BUFSIZE],其中包括*pBuffer指針用于存放圖像地址, i_full布爾型變量用于判斷是否存取圖像,其中宏定義BUFSIZE為需要存放圖像的內(nèi)存數(shù)量,初始化整型變量ai,aj=0,其中ai為回調(diào)函數(shù)的圖像存取序號(hào),aj為圖像存入內(nèi)存序號(hào);2)配置采集信息包括連接圖像采集卡,選擇與圖像采集卡連接的高速攝像頭,調(diào)用外部ccf文件配置高速攝像頭各個(gè)采集參數(shù);3)創(chuàng)建圖像緩存空間,判斷是否開始采集圖像;4)開始采集圖像,判斷allimaq[aj]·i_full的狀態(tài)是否為true,若是,說明新的一中貞圖像已經(jīng)采集完畢,可以進(jìn)行傳輸操作;同時(shí)把a(bǔ)llimaq[aj].pBuff中的圖像數(shù)據(jù)輸出,使 allimaq[aj]. i_full為false,并aj++ ;否則,說明新的圖像還未采集到;5)當(dāng)停止拍攝時(shí),釋放配置圖像采集卡、高速攝像頭以及所創(chuàng)建的圖像數(shù)組的內(nèi)存空間;6)每次拍攝一幀圖像時(shí),程序會(huì)自動(dòng)轉(zhuǎn)入回調(diào)函數(shù)中,進(jìn)行圖像的存儲(chǔ)操作,包括如下步驟A:將采集到的圖像放入圖像緩存中;B :圖像緩存中所存儲(chǔ)的圖像,傳遞至allimaq[ai]. pBuff中;C :清除及釋放圖像緩存;D :ai++ ;7)步驟6)結(jié)束后,譯生成DLL動(dòng)態(tài)鏈接庫,包括初始化函數(shù)(DALSA_Init)、開始拍攝函數(shù)(DALSA_Start)、采集圖像函數(shù)(DALSA_Snap )、停止拍攝函數(shù)(DALSA_Stop ),使用 LabVIEW的Call Library Function Node調(diào)用上述DLL動(dòng)態(tài)鏈接庫的函數(shù),完成對(duì)高速攝像頭的圖像采集及控制,具體步驟包括如下I)調(diào)用DALSA_Init函數(shù),初始化高速攝像頭、圖像采集卡,創(chuàng)建一維圖像數(shù)組,數(shù)組長度為1048576,創(chuàng)建圖像緩存;II)調(diào)用DALSA_Start函數(shù),開始進(jìn)入拍攝狀態(tài);III)調(diào)用DALSA_Snap采集圖像函數(shù),將輸出的一維圖像數(shù)組轉(zhuǎn)換為二維圖像數(shù)組,轉(zhuǎn)換后的二維圖像數(shù)組大小為1024*1024,通過LabVIEW的Vision模塊的IMAQ ArrayToImage. Vi將二維圖像數(shù)組以圖像形式顯示;IV)調(diào)用DALSA_Stop函數(shù),停止拍攝,清理釋放所占用的內(nèi)存空間。
全文摘要
本發(fā)明涉及一種基于Labview的高速圖像采集方法,包括高速攝像頭、圖像采集卡以及工控機(jī),高速攝像頭通過專用的圖像采集線纜與圖像采集卡連接,圖像采集卡裝在工控機(jī)上,采用DALSA公司提供的Sapera++LT函數(shù)開發(fā)包,編寫DLL動(dòng)態(tài)鏈接庫由LabVIEW調(diào)用,完成對(duì)高速攝像頭FA-21-1M120-00-R的圖像采集以及實(shí)時(shí)控制。通過LabVIEW本高速圖像采集驅(qū)動(dòng)程序完成了高速攝像頭對(duì)圖像的采集及對(duì)高速攝像頭各參數(shù)的設(shè)置,具有高速、實(shí)時(shí)、穩(wěn)定的優(yōu)點(diǎn)。
文檔編號(hào)G06F9/44GK102611836SQ201210024840
公開日2012年7月25日 申請(qǐng)日期2012年2月6日 優(yōu)先權(quán)日2012年2月6日
發(fā)明者張彩艷, 戴曙光, 穆平安, 鄔敏杰, 金晅宏 申請(qǐng)人:上海理工大學(xué)