MFC+OPENCV3.0显示摄像头画面

因为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显示一帧。

猜你喜欢

转载自blog.csdn.net/qq_18297675/article/details/72819488