1. 程式人生 > >Dalsa公司PX4影象採集卡+P4線陣彩色相機的開發

Dalsa公司PX4影象採集卡+P4線陣彩色相機的開發

本文以最近使用的Dalsa公司的P4-CC-02K04T彩色線陣相機和Xcelera-CL_PX4影象採集卡為例講述線陣相機的簡單用法。新手初用,如有錯誤,歡迎指正。

 

P4-CC-02K04T彩色線陣相機

P4系列是Dalsa最新推出的高效能多線掃描數字相機,基於線陣CMOS感測器結構。P4-2k線陣相機的解析度為2k,像元大小為14.08um*14.08um,行頻最高可達40KHz。

P4彩色三線CMOS感測器提供單獨影象捕獲區域,並可輸出每個通道(紅、綠、藍)的顏色資訊,以獲取最佳的彩色還原性和效能。相機的CameraLink介面使用高階晶片,傳輸距離可達15米以上。

 

Xcelera-CL_PX4影象採集卡

X64 Xcelera系列充分利用了PCI Express的平臺,將傳統的影象採集和處理技術的效能和靈活性提升至新的水平。PCIe的點對點技術不需要字型匯流排負載,只要消耗極低的CPU,即可同時進行影象的採集和傳輸。採集影象速率高達1GB/s,向主機記憶體傳輸影象速率高達1GB/s。

 

相機控制軟體

相機控制軟體基於Dalsa公司的CamExpert軟體提供的Demo編寫。

注:CamExpert軟體生成的.ccf檔案主要用來配置採集卡,向相機中寫引數需要用到CamExpert軟體中的Camera Information設定的Power-upConfiguration選項。

1. 首先需要在CamExpert軟體上熟悉相機的控制,配置相機,產生對應.ccf配置檔案。

2. 熟讀CamExpert的Demo程式,在此基礎上自己實現一個簡單的Demo程式,走通相機採圖的流程。下面簡要說一下采集卡、線陣相機控制有關的類和函式。

 

3個必不可少的類:

(控制與板卡相連的採集裝置:SapAcquisition)(管理轉移過程SapTransfer)(操作buffer資源  SapBuffer)

一個相機採圖的回撥函式:XferCallback

 

初始化與採集操作步驟:

1. 使用SapAcqisition class定義所需器件和相機配置檔案

2. 使用SapBuffer class(或SapBufferWithTrash class)建立buffer來儲存影象。

3. 如有必要,使用SapView class分配顯示區顯示影象

4. 使用SapTransfer class(或Specialized Transfer Classes)進行採集,如需對影象進行處理或者顯示請使用傳輸回撥函式。

5. 為生成的物件(acquisition, view, buffer, and transfer)分配資源,使用對應的Create函式。

6. 利用SapTransfer類採集影象。

7. 採集完成後釋放所有資源。

8. Delete所有生成的new物件。

簡單示例程式Demo:

//Transfer callback function is called each time a complete frame is transferred.
//The function below is a user defined callback function
 
void XferCallback(SapXferCallbackInfo *pInfo)
{
    //Display the last transferred frame
    SapView *pView = (SapView *)pInfo->GetContext();
    pView->Show();
    
}
//Example Program
//
main()
{
    //Allocate acquisition object
    SapAcqisition *pAcq = 
        new SapAcqisition(SapLocation("X64-CL_1", 0), "MyCamera.ccf");
    
    //Allocate buffer object, taking settings directly from the acquisition
    SapBuffer *pBuffer = new SapBuffer(1, pAcq);
    
    //Allocate view object, images will be displayed directly on the desktop
    SapView *pView = new SapView(pBuffer, SapHwndDesktop);
    
    //Allocate transfer object to link acquisition and buffer
    SapTransfer *pTransfer = new SapTransfer(XferCallback, pView);
    pTransfer->AddPair(SapXferPair(pAcq, pBuffer));
    
    //Create resources for all objects
    BOOL success = pAcq->Create();
    success = pBuffer->Create();
    success = pView->Create();
    success = pTransfer->Create();
    
    //start a Continuous transfer(live grab)
    success = pTransfer->Grab();
    printf("Press any key to stop grab\n");
    getch();
    
    //Stop the transfer and wait (timeout = 5 seconds)
    success = pTransfer->Freeze();
    success = pTransfer->Wait(5000);
    Printf("Press any key to terminate\n");
    getch();
    
    //Release resources for all objects
    success = pTransfer->Destroy();
    success = pView->Destroy();
    success = pBuffer->Destroy();
    success = pAcq->Destroy();
    
    //Free all objects
    delete pTransfer;
    delete pView;
    delete pBuffer;
    delete pAcq;
    
    return 0;
}


 

相機及採集卡的影象的控制在此基礎上結合CamExpert軟體提供的Demo進行編寫,就能實現實現簡單的線陣相機採圖控制了。