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);
文章详细介绍了如何从海康相机的帧数据中提取信息,并将其转换为MAT格式。首先定义了显示帧信息结构体,然后在回调方法中保存帧数据,包括数据指针、长度、宽度、高度和像素类型。最后,使用这些信息创建了一个MAT图像,转换数据格式为MatType.CV_8UC1。
884

被折叠的 条评论
为什么被折叠?



