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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值