1. 程式人生 > >關於紅外相機熱成像相機的一些sdk使用方法

關於紅外相機熱成像相機的一些sdk使用方法

將紅外熱成像相機轉化成c格式,從而用opencv進行顯示。

先看一些開發手冊的函式

定義一個函式指標  typedef long (*CBF_IR)(long lData, long lParam);                 CBF_IR pCBFframe;

相機介面api函式

IR_SDK_API long IRSDK_Create(long handle, int port, char* ip, CBF_IR cbf_stm, CBF_IR cbf_cmd, CBF_IR cbf_comm, long param = 0);

定義個結構體


定義一個結構體

typedef struct tagFrame

{
    unsigned short width;
    unsigned short height;
    unsigned short u16FpaTemp; //焦面溫度隨影象資料一起上傳
    unsigned char  u8SensorType; //探測器型別隨影象資料一起上傳
    unsigned short u16EnvTemp; //環境溫度隨影象資料一起上傳
    unsigned char u8TempPrecison; //溫度轉換
    unsigned short buffer[327680];

} Frame;


IplImage *m_pImgsrc = NULL;
long FrameProc(long hFrame, long lParam)                                                               //1
{
Frame* pFrame = (Frame*)hFrame;

//pFrame為接收到的溫度資料。此處根據自己的需求新增程式碼


//CIRdemovsDlg* dlg = ((CIRdemovsDlg *)lParam);
//CString temp;
//dlg->msgText.GetWindowTextW(temp);
//temp += CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S")) + _T(" 接受到資料\r\n");
//dlg->msgText.SetWindowTextW(temp);

unsigned char y8[327680]; // y8 空間大小為影象畫素數
    IRSDK_FrameConvert(pFrame, y8, 50, 50, 1, 0);


/*CString strTest;
strTest.Format(L"%d-%d",pFrame->height,pFrame->width);
AfxMessageBox(strTest);*/       
//bool bStop = true;
CvSize sz;
sz.height = pFrame->height;
sz.width = pFrame->width;
if(m_pImgsrc==NULL)
m_pImgsrc = cvCreateImage(sz,8,1);


uchar* pd = (uchar*)m_pImgsrc->imageData; 
for(int i=0;i<sz.height;i++)
{
for(int j=0;j<sz.width;j++)
{
int nIndex = i*m_pImgsrc->widthStep+j;
pd[nIndex] = y8[nIndex];
}
}


cvNamedWindow("ShowIR");
cvShowImage("ShowIR",m_pImgsrc);
cvWaitKey(1);

}