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

55 篇文章 205 订阅
45 篇文章 6 订阅


                                             本文由@星沉阁冰不语出品,转载请注明作者和出处。

文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/51348654

微博:http://weibo.com/xingchenbing 


在之前的一篇博客中已经记录了如何打开一张图片,能打开图片之后,自然就是尝试打开摄像头。在之前打开图片的时候已经知道了怎么应用按钮控件和图片控件,虽然都没记录。。。最最重要的是,知道了怎么让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)无限循环,一直执行的就是这一段程序,其他代码根本不会执行。。。

效果图如下:




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

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


最近开通了微信公众号,感兴趣的同学可以扫码在微信上交流。


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值