1. 程式人生 > >DALSA線陣CCD相機開發 之 opencv讀取圖片

DALSA線陣CCD相機開發 之 opencv讀取圖片

SDK的下載

SDK的安裝

解壓執行.exe檔案,按照提示確定,下一步即可。

幫助文件和demo

如果要獲得完整的幫助文件和demo,在SDK安裝時選擇full安裝,路徑可以自己選擇,預設路徑為 C:\Program Files\Teledyne DALSA\。

主要demo簡介

在C:\Program Files\Teledyne DALSA\Sapera\Demos\Classes\VC中提供了多個開發Demo供使用者參考

  • Grab Demo (Dialog Box Interface 對話方塊) 路徑:\Sapera\Demos\Classes\Vc\GrabDemo\Release\GrabDemo.exe 功能:顯示了基本的採集功能 允許獲得連續或單幀影象 同時調整採集引數

  • Grab Demo (Single Document Interface 單文件) 路徑:\Sapera\Demos\Classes\Vc\GrabDemo\Release\GrabDemoSDI.exe 功能:顯示了基本的採集功能 允許獲得連續或單幀影象 同時調整採集引數

  • Sequential Grab Demo 路徑:\Sapera\Demos\Classes\Vc\SeqGrabDemo\Release\SeqGrabDemo.exe 功能:採集序列影象至記憶體而後顯示 程式允許錄製多段視訊 並可儲存、匯入AVI檔案 每一影象儲存於不同buffer中 可通過對話方塊設定buffer大小等引數

  • Bayer Demo 路徑:\Sapera\Demos\Classes\Vc\BayerDemo\Release\BayerDemo.exe 功能:顯示Bayer 轉換功能 進行Bayer轉換引數設定

  • Flat-field Demo 路徑:\Sapera\Demos\Classes\Vc\FlatFieldDemo\Release\FlatFieldDemo.exe 功能:顯示平場校正功能 平場校正Flat FieldCorrection (FFC) 包括調整模式噪聲FixedPattern Noise (FPN),畫素置換 Pixel Replacement, Photo Response Non Uniformity (PRNU), 和斑點校正 Shading Correction.

  • I/O Demo 路徑:\Sapera\Demos\Classes\Vc\IODemo\Release\IODemo.exe 功能:顯示一般I/O裝置的使用 允許監視當前輸入輸出狀態 改變高低極性狀態;允許監視輸入中斷並記錄中斷數

  • GigE-Vision Camera Demo 路徑:\Sapera\Demos\Classes\Vc\GigeCameraDemo\Release\GigeCameraDemo.exe 功能:怎樣使用DALSAGigE Vision™ 相機獲得影象. 可匯入相機配置檔案

使用opencv讀取圖片

以 GigeCameraDemo 為例,找到 XferCallback 函式,修改程式碼如下:

`void CGigeCameraDemoDlg::XferCallback(SapXferCallbackInfo *pInfo)
{
	CGigeCameraDemoDlg *pDlg= (CGigeCameraDemoDlg *) pInfo->GetContext();

   // If grabbing in trash buffer, do not display the image, update the
   // appropriate number of frames on the status bar instead
   if (pInfo->IsTrash())
   {
      CString str;
      str.Format(_T("Frames acquired in trash buffer: %d"), pInfo->GetEventCount());
      pDlg->m_statusWnd.SetWindowText(str);
   }

   // Refresh view
   else
   {
	   BYTE pData;
	   void* pDataAddr = &pData;
	   BOOL success = pDlg->m_Buffers->GetAddress(static_count, &pDataAddr);
	   int width = pDlg->m_Buffers->GetWidth();
	   int height = pDlg->m_Buffers->GetHeight();
	   cv::Mat img = cv::Mat::zeros(cv::Size(width, height), CV_8U);
	   memcpy(img.data, pDataAddr, width*height);
	   //Find_and_Draw_LeftLines(img, 10, 150, 5, left_deta_width);
	   //line(left_pic, cv::Point(left_detect_width, 0), cv::Point(left_detect_width, 32), cv::Scalar(255, 255, 0), 2, 4);
	   //cv::imshow("image", left_pic);
	   cv::imshow("image", img);
	   cv::waitKey(1);
   }
}`

執行程式碼即可。