1. 程式人生 > >MFC+OPENCV3.0顯示攝像頭畫面

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顯示一幀。