码迷,mamicode.com
首页 > 编程语言 > 详细

OpenCV实践之路——MFC与OpenCV联合打开摄像头

时间:2016-05-09 01:44:56      阅读:338      评论:0      收藏:0      [点我收藏+]

标签:

在之前的一篇博客中已经记录了如何打开一张图片,能打开图片之后,自然就是尝试打开摄像头。在之前打开图片的时候已经知道了怎么应用按钮控件和图片控件,虽然都没记录。。。最最重要的是,知道了怎么让MFC与OpenCV的数据交互——Mat与CImage相互转换。有了之前的基础,打开摄像头就可以得心应手了。还是直接上代码,然后再说问题:

void CMFCtestDlg::OnBnClickedButton1()
{
	// TODO: Add your control notification handler code here
	VideoCapture cap;
	cap.open(0);
	Mat frame;

	CWnd *pWnd = GetDlgItem(IDC_STATIC);//获得pictrue控件窗口的句柄   
	CDC *pDC = pWnd->GetDC();//获得pictrue控件的DC  

	while (1)
	{
		cap >> frame;
		//imshow("img", frame);
		waitKey(10);
		MatCImage mc;
		mc.MatToCImage(frame, image);

		GetClientRect(&dlg_rect);
		GetDlgItem(IDC_STATIC)->GetClientRect(&pic_rect);

		dlg_center = dlg_rect.CenterPoint();
		pic_rect.MoveToX(dlg_rect.Width() / 2 - image.GetWidth() / 2);
		pic_rect.MoveToY(dlg_rect.Height() / 2 - image.GetHeight() / 2);

		//pic_rect.right = pic_rect.left + image.GetWidth();
		//pic_rect.bottom = pic_rect.top + image.GetHeight();

		GetDlgItem(IDC_STATIC)->MoveWindow(pic_rect);

		image.Draw(pDC->m_hDC, CRect(0, 0, image.GetWidth(), image.GetHeight()));
	}
}


可以看到,这一次不像打开图片那样,最后的显示是在OnPaint()函数里面,而是直接写在了按钮的处理函数里面。

现在遇到的问题就是,好像所有的操作都要在这里进行,因为这里是一个while(1)无限循环,一直执行的就是这一段程序,其他代码根本不会执行。。。

效果图如下:


技术分享


不过即使是这样现在还没遇到太多的问题,做个行人检测人脸识别什么的也够了。因为他们就是在循环中执行的。

后面的博客将会记录人脸识别相关内容,这次可不仅仅是人脸检测了,而是从视频中识别出自己。

OpenCV实践之路——MFC与OpenCV联合打开摄像头

标签:

原文地址:http://blog.csdn.net/xingchenbingbuyu/article/details/51348654

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!