用是vs2013新建一个空的 mfc项目,配置该项目的属性。让该项目可以调用opencv的库以及相关函数。
//CMFCApplication12345Dlg 这个是主类名
void CMFCApplication12345Dlg::openCamer() { VideoCapture Capture(0); if (!Capture.isOpened()) { return; } Mat frame; camersta = false;//打开状态 while(!camersta) { Capture >> frame; if (frame.rows != 0) img = &frame.operator IplImage(); DrawToMFC(IDC_STATIC, img); } } UINT CMFCApplication12345Dlg::OnDis1(LPVOID param)//处理线程 { CMFCApplication12345Dlg *pDemo = (CMFCApplication12345Dlg *)param; pDemo->openCamer(); return 0; } void CMFCApplication12345Dlg::OnBnClickedButton1() //打开摄像头 按钮 { // TODO: 在此添加控件通知处理程序代码 AfxBeginThread(OnDis1, this);//为什么要用线程。 //从打开摄像头的方式看,用了while。 程序陷入死循环。此时想点击关闭按钮,无响应。 } void CMFCApplication12345Dlg::OnBnClickedButton2()//关闭按钮 做的事情 { // TODO: 在此添加控件通知处理程序代码 camersta = true; } void CMFCApplication12345Dlg::DrawToMFC(int Ctrol_ID, IplImage *pImage) { CDC* pDC = GetDlgItem(Ctrol_ID)->GetDC(); HDC hDC = pDC->GetSafeHdc(); CvvImage cimg; cimg.CopyOf(pImage); CRect rect; GetDlgItem(Ctrol_ID)->GetClientRect(&rect); cimg.DrawToHDC(hDC, &rect); ReleaseDC(pDC); }
