關於紅外相機熱成像相機的一些sdk使用方法
阿新 • • 發佈:2018-12-18
將紅外熱成像相機轉化成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;
//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);
}