MFC+OPENCV3.0顯示攝像頭畫面
阿新 • • 發佈:2018-11-01
因為3.0以後CvvImage(點選即可下載)被刪除了,所以需要下載這個類,然後新增到工程目錄下。
測試效果圖:
(攝像頭被擋住了,所以是黑的)
一、開啟攝像頭
新增一個成員變數
VideoCapture m_capture;
void COPENCV攝像頭操作Dlg::OnBnClickedBtnOpen()
{
if (!m_capture.isOpened())
{
m_capture.open(0);
SetTimer(1, 40, NULL);
}
}
二、讀取幀
void COPENCV攝像頭操作Dlg::OnTimer(UINT_PTR nIDEvent)
{
Mat frame;
m_capture >> frame; //讀取
ShowFrame(frame); //顯示
CDialogEx::OnTimer(nIDEvent);
}
三、顯示到Picture 控制元件上
//顯示幀
void COPENCV攝像頭操作Dlg::ShowFrame(Mat& frame)
{
CvvImage vimg;
IplImage img(frame);
vimg.CopyOf(&img);
//獲取pic控制元件的控制代碼
CWnd* pWnd = GetDlgItem(IDC_STATIC_VIDIO);
//獲取pic控制元件的DC
HDC dc = pWnd->GetDC()->GetSafeHdc();
//獲取pic控制元件的大小
RECT rect;
pWnd->GetClientRect(&rect);
//將視訊幀畫到控制元件上
vimg.DrawToHDC(dc, &rect);
}
四、關閉攝像頭
void COPENCV攝像頭操作Dlg::OnBnClickedBtnClose()
{
if (m_capture.isOpened())
{
m_capture.release();
KillTimer(1 );
Invalidate();
}
}
定時器的間隔就是多少ms顯示一幀。