1.定义取帧
MyCamera.MV_DISPLAY_FRAME_INFO[] stDisplayFrameInfo = new MyCamera.MV_DISPLAY_FRAME_INFO[4];
2.改写回调方法
private void ImageCallBack(IntPtr pData, ref MyCamera.MV_FRAME_OUT_INFO_EX pFrameInfo, IntPtr pUser)
{
int nIndex = (int)pUser;
// ch:抓取的帧数 | en:Aquired Frame Number
++m_nFrames[nIndex];
lock (m_BufForSaveImageLock[nIndex])
{
if (m_pSaveImageBuf[nIndex] == IntPtr.Zero || pFrameInfo.nFrameLen > m_nSaveImageBufSize[nIndex])
{
if (m_pSaveImageBuf[nIndex] != IntPtr.Zero)
{
Marshal.Release(m_pSaveImageBuf[nIndex]);
m_pSaveImageBuf[nIndex] = IntPtr.Zero;
}
m_pSaveImageBuf[nIndex] = Marshal.AllocHGlobal((Int32)pFrameInfo.nFrameLen);
if (m_pSaveImageBuf[nIndex] == IntPtr.Zero)
{
return;
}
m_nSaveImageBufSize[nIndex] = pFrameInfo.nFrameLen;
}
m_stFrameInfo[nIndex] = pFrameInfo;
CopyMemory(m_pSaveImageBuf[nIndex], pData, pFrameInfo.nFrameLen);
}
MyCamera.MV_DISPLAY_FRAME_INFO stDisplayInfo = new MyCamera.MV_DISPLAY_FRAME_INFO();
stDisplayInfo.hWnd = m_hDisplayHandle[nIndex];
stDisplayInfo.pData = pData;
stDisplayInfo.nDataLen = pFrameInfo.nFrameLen;
stDisplayInfo.nWidth = pFrameInfo.nWidth;
stDisplayInfo.nHeight = pFrameInfo.nHeight;
stDisplayInfo.enPixelType = pFrameInfo.enPixelType;
m_pMyCamera[nIndex].MV_CC_DisplayOneFrame_NET(ref stDisplayInfo);
// 下面的代码是我加入的
stDisplayFrameInfo[nIndex].pData = pData;
stDisplayFrameInfo[nIndex].nDataLen = pFrameInfo.nFrameLen;
stDisplayFrameInfo[nIndex].nWidth = pFrameInfo.nWidth;
stDisplayFrameInfo[nIndex].nHeight = pFrameInfo.nHeight;
stDisplayFrameInfo[nIndex].enPixelType = pFrameInfo.enPixelType;
}
把海康相机帧转换为MAT格式
把显示帧转换为Mat格式
Mat image = new Mat(stDisplayFrameInfo[0].nHeight, stDisplayFrameInfo[0].nWidth, MatType.CV_8UC1, stDisplayFrameInfo[0].pData);
海康官网 代码示例
在官方示例中加入的代码
1.定义显示帧信息
MyCamera.MV_DISPLAY_FRAME_INFO[] stDisplayFrameInfo = new MyCamera.MV_DISPLAY_FRAME_INFO[4];
2.把帧数据保存
stDisplayFrameInfo[nIndex].pData = pData;
stDisplayFrameInfo[nIndex].nDataLen = pFrameInfo.nFrameLen;
stDisplayFrameInfo[nIndex].nWidth = pFrameInfo.nWidth;
stDisplayFrameInfo[nIndex].nHeight = pFrameInfo.nHeight;
stDisplayFrameInfo[nIndex].enPixelType = pFrameInfo.enPixelType;3.转换数据格式
Mat image = new Mat(stDisplayFrameInfo[0].nHeight, stDisplayFrameInfo[0].nWidth, MatType.CV_8UC1, stDisplayFrameInfo[0].pData);