海康工业相机 显示帧转换为MAT

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);

猜你喜欢

转载自blog.csdn.net/easyboot/article/details/131228161
今日推荐