本文由@星沉阁冰不语出品,转载请注明作者和出处。
文章链接: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()));
}
}
现在遇到的问题就是,好像所有的操作都要在这里进行,因为这里是一个while(1)无限循环,一直执行的就是这一段程序,其他代码根本不会执行。。。
效果图如下:
不过即使是这样现在还没遇到太多的问题,做个行人检测人脸识别什么的也够了。因为他们就是在循环中执行的。
后面的博客将会记录人脸识别相关内容,这次可不仅仅是人脸检测了,而是从视频中识别出自己。
最近开通了微信公众号,感兴趣的同学可以扫码在微信上交流。