【嵌牛导读】:
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。