Opencv+VS+MFC 播放视频(cv 2.3+版本)

来源:互联网 发布:linux使用编辑命令 编辑:程序博客网 时间:2024/05/21 09:19
  • 配置环境,可以参考:VS2013配置OpenCv3.0
  • 建立MFC对话框,添加按钮(打开视频和关闭视频),添加picture控件(IDC_P)。

  • 导入Cvvimage 的头文件和cpp文件。下载地址

  • 添加全局变量。
  • VideoCapture capture;CRect rect;CDC *pDC;HDC hDC;CWnd *pwnd;


  • 在OnInitDialog()中添加
  • pDC = pwnd->GetDC();hDC = pDC->GetSafeHdc();pwnd->GetClientRect(&rect);


  • 编辑按钮函数。
    void CMFCApplication1Dlg::OnBnClickedOpenvideo(){// TODO:  在此添加控件通知处理程序代码//VideoCapture if (!capture.isOpened()){capture.open("D://1.avi");}SetTimer(1, 25, NULL); //定时器,定时时间和帧率一致//Mat image = imread("0308.jpg", 1); //显示图片//DrawPicToHDC(cvCloneImage(&(IplImage)image), IDC_P);}void CMFCApplication1Dlg::OnBnClickedClosevideo(){// TODO:  在此添加控件通知处理程序代码capture.release();}

  • 添加timer:项目->类向导


  • void CMFCApplication1Dlg::OnTimer(UINT_PTR nIDEvent){// TODO:  在此添加消息处理程序代码和/或调用默认值if (1 == nIDEvent)     {           Mat img;  capture.read(img); //从摄像头或者文件中抓取并返回一帧           CvvImage m_CvvImage;IplImage* img_temp = cvCloneImage(&(IplImage)img);m_CvvImage.CopyOf(img_temp, 1); //复制该帧图像    cvReleaseImage(&img_temp);        m_CvvImage.DrawToHDC(hDC, &rect); //显示到设备的矩形框内    }CDialogEx::OnTimer(nIDEvent);}


  • 其中使用Mat格式,减少内存问题,经测试几乎没有内存问题,后续会把CvvImage中的Iplimage也换成Mat。
0 0
原创粉丝点击