美文网首页嵌牛IT观察
vs2015+opencv3.3+mfc读取摄像头显示在图片控件

vs2015+opencv3.3+mfc读取摄像头显示在图片控件

作者: 小米__ | 来源:发表于2018-03-26 22:38 被阅读20次

    【嵌牛导读】:

         opencv界面开发常用的有mfc、QT、c#等。本文就是使用opencv读取摄像头,使用opencv处理视频的第一步。转载自本人博客。

    【嵌牛正文】:

    要开始做一个行人检测的小项目,首先读取出摄像头显示,参考了这位博主的教程:http://blog.csdn.net/qq_32171677/article/details/61190719,可能是版本问题无法读出摄像头显示在Picture Control控件中,因此做了一些改进,改变了获取摄像头的方式,步骤如下:

    1、配置环境为VS2015+OpenCV3.3,按照以上博主的教程搭建图形界面,最后程序正常执行,摄像头旁边的led灯也亮了,但是图形控件中并没有显示出来摄像头的图像。

        2、新建一个Mat型变量和VideoCapture 变量

    Mat g_srcImage;

    VideoCapture Capture(0);

    3、修改打开摄像头按钮事件相应函数,将获取摄像头一帧数据的函数改为:Capture >> g_srcImage;再将Mat型的g_srcImage改为IplImage类型变量,修改后的函数如下:

    // TODO: 在此添加控件通知处理程序代码 namedWindow("显示摄像头"); Capture >> g_srcImage; imshow("显示摄像头", g_srcImage); frame= &IplImage(g_srcImage); pDC = GetDlgItem(IDC_PIC_STATIC)->GetDC();//GetDlgItem(IDC_PIC_STATIC)意思为获取显示控件的句柄(句柄就是指针),获取显示控件的DC GetDlgItem(IDC_PIC_STATIC)->GetClientRect(&rect); hDC = pDC->GetSafeHdc();//获取显示控件的句柄 CvvImage m_CvvImage; m_CvvImage.CopyOf(frame, 1); //复制该帧图像 m_CvvImage.DrawToHDC(hDC, &rect); //显示到设备的矩形框内 ReleaseDC(pDC); SetTimer(1, 25, NULL); //定时器,定时时间和帧率一致

    4、同时,将定时器函数做出同样的更改:

    // TODO: 在此添加消息处理程序代码和/或调用默认值a

    Capture >> g_srcImage;

    imshow("显示摄像头", g_srcImage);

    pDC = GetDlgItem(IDC_PIC_STATIC)->GetDC();//GetDlgItem(IDC_PIC_STATIC)意思为获取显示控件的句柄(句柄就是指针),获取显示控件的DC 

    GetDlgItem(IDC_PIC_STATIC)->GetClientRect(&rect);

    hDC = pDC->GetSafeHdc();//获取显示控件的句柄 

    frame = &IplImage(g_srcImage);

    CvvImage m_CvvImage;

    m_CvvImage.CopyOf(frame, 1); //复制该帧图像   

    m_CvvImage.DrawToHDC(hDC, &rect); //显示到设备的矩形框内 

    CDialogEx::OnTimer(nIDEvent);

    5、关闭摄像头只是简单的关闭定时器

    ReleaseDC(pDC);

    KillTimer(1);

    6、下载工程连接:https://download.csdn.net/download/ai_lz/10284887

    有问题请留言,转载请声明http://blog.csdn.net/ai_Lz/article/details/79545668

    相关文章

      网友评论

      本文标题:vs2015+opencv3.3+mfc读取摄像头显示在图片控件

      本文链接:https://www.haomeiwen.com/subject/lsprbxtx.html