1. 程式人生 > >Opencv+VS+MFC 播放視訊(cv 2.3+版本)

Opencv+VS+MFC 播放視訊(cv 2.3+版本)

  • 建立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。