在之前的一篇博客中已经记录了如何打开一张图片,能打开图片之后,自然就是尝试打开摄像头。在之前打开图片的时候已经知道了怎么应用按钮控件和图片控件,虽然都没记录。。。最最重要的是,知道了怎么让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)无限循环,一直执行的就是这一段程序,其他代码根本不会执行。。。
效果图如下:
不过即使是这样现在还没遇到太多的问题,做个行人检测人脸识别什么的也够了。因为他们就是在循环中执行的。
后面的博客将会记录人脸识别相关内容,这次可不仅仅是人脸检测了,而是从视频中识别出自己。
时间: 2024-10-14 00:10:48