Opencv+VS+MFC 播放視訊(cv 2.3+版本)
阿新 • • 發佈:2019-01-03
- 建立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。