2013-05-12 141 views
0

我正在寫一個opencv代碼,並希望使用MFC在GUI上顯示框架。如何在MFC中顯示opencv框架?

問題是我不知道如何。

在的OnInitDialog()

如果我試圖嵌入cvWindow到MFC窗體,這可能是工作。

display = new IplImage(trackview);//trackview is a totally black Mat. 
    cvNamedWindow("IDC_STATIC_OUTPUT", 0); 
    cvResizeWindow("IDC_STATIC_OUTPUT", 480, 640); 

    hWnd = (HWND) cvGetWindowHandle("IDC_STATIC_OUTPUT"); 
    hParent = ::GetParent(hWnd); 
    ::SetParent(hWnd, GetDlgItem(ID_DISPLAY)->m_hWnd); 
    ::ShowWindow(hParent, SW_HIDE); 

    cvShowImage("IDC_STATIC_OUTPUT", display); 

enter image description here

但是,當我的OpenCV嵌入代碼並打開網絡攝像頭,該GUI沒有響應,並且不能被顯示的幀。即使我只是將此示例代碼(打開網絡攝像頭)添加到OnInitDialog(),應用程序窗體將不會顯示。

奇怪的是,我寫了一個「imwrite(」frame.png「,tmp)」,幀可以寫入文件。但是GUI沒有響應。

while(true) 
    { 
     CvCapture* capture; 
     capture = cvCaptureFromCAM(0); 
     frame = cvQueryFrame(capture); 
     Mat tmp(frame); 
     imwrite("frame.png",tmp); 
    } 

順便說一句,有沒有更好的方式來顯示MFC上的OpenCV IplImage?有一個cvvImage.showImage()函數,但它在Opecv 2.4版本中被丟棄。

+0

嗨,你找到反正在MFC中使用OpenCV的,或MFC不適合使用OpenCV的,我也找了一些告訴在C++中使用什麼來開發計算機視覺應用程序 – 2017-04-26 09:11:47

回答

1

請在while循環中嘗試cvWaitkey(30)。 cvShowImage可能需要一些時間來顯示圖像。

+0

這種方法對我不起作用。我終於放棄使用MFC。 – 2013-06-18 19:51:41

0

您可以直接在MFC GUI上顯示IplImage。它不起作用的原因是因爲你試圖在opencv窗口上顯示的圖像不是MFC窗口。 至於如何在MFC上顯示它;

(1) Use CImage(CvvImage) 
(2) Fill in bitmap and display. 

答案可以在這裏位於:

How to display OpenCV Mat on MFC View