如何在MFC中显示opencv框架?

时间:2013-05-12 19:27:02

标签: opencv mfc webcam

我正在编写一个opencv代码,并希望使用MFC在GUI上显示帧。

问题是我不知道如何。

在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版本中被丢弃。

2 个答案:

答案 0 :(得分:1)

请在while循环中尝试cvWaitkey(30)。 cvShowImage可能需要一些时间来显示图像。

答案 1 :(得分:1)

您可以直接在MFC GUI上显示IplImage。它不起作用的原因是因为你试图在opencv Window上显示图像,而不是MFC窗口。 至于如何在MFC上显示它;

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

答案可以在这里找到:

How to display OpenCV Mat on MFC View