栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

海康监控相机 Demo MFC综合示例 转 OpenCV Mat

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

海康监控相机 Demo MFC综合示例 转 OpenCV Mat

从项目的 资源视图 找到 主界面

因为运行后单击左侧的Tree控件结点,即可在预览窗口看到图像,所以查看Tree控件的事件

 

找到对应.cpp下的该函数 

 设置断点,跟踪到DblPlayChan(m_iCurDeviceIndex, iIndex, hSelect);

进入该函数,跟踪到StartPlay(&pStruChanInfo, hChanItem)

 进入StartPlay函数,跟踪时发现g_bInSide为true,只能运行StartPlayInsideDecode,无法运行到NET_DVR_RealPlay_V40(g_struDeviceInfo[iDeviceIndex].lLoginID, &struPlayInfo, g_RealDataCallBack_V30, &m_iSubWndIndex);如图

找到 g_bInSide的定义,改为FALSE

然后可以跟踪到回调函数g_RealDataCallBack_V30

 

 找到回调函数g_RealDataCallBack_V30,在其上方添加转OpenCV  Mat的函数,代码如下:

//数据解码回调函数,
//功能:将YV_12格式的视频数据流转码为可供opencv处理的BGR类型的图片数据,并实时显示。
void CALLBACK DecCBFun(long nPort, char* pBuf, long nSize, frame_INFO* pframeInfo, long nUser, long nReserved2)
{
    if (pframeInfo->nType == T_YV12)
    {
        //std::cout << "the frame infomation is T_YV12" << std::endl;
        if (g_BGRImage.empty())
        {
            g_BGRImage.create(pframeInfo->nHeight, pframeInfo->nWidth, CV_8UC3);
        }
        Mat YUVImage(pframeInfo->nHeight + pframeInfo->nHeight / 2, pframeInfo->nWidth, CV_8UC1, (unsigned char*)pBuf);

        cvtColor(YUVImage, g_BGRImage, COLOR_YUV2BGR_YV12);
        imshow("RGBImage1", g_BGRImage);
        waitKey(1);
        YUVImage.~Mat();
    }
}

注意:此前需要配置好OpenCV库。并在此添加头文件,定义保存Mat的变量g_BGRImage

修改回调函数g_RealDataCallBack_V30,通过PlayM4_SetDecCallBackExMend调用DecCBFun进行转换 

运行效果:

特别注意:

这种方式延迟严重,看来还需要找其他的办法。

 文中转换函数链接:Windows下使用C++调用海康SDK获取视频,用OpenCV显示_持久决心的博客-CSDN博客

另有参考链接:

海康网络摄像机YV12转换为BGR,由opencv Mat显示_shangtao1989的博客-CSDN博客

感谢作者。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/458157.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号