嵌牛IT观察

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

2018-03-26  本文已影响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

上一篇 下一篇

猜你喜欢

热点阅读