0

我正在编写一个 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);

在此处输入图像描述

但是当我嵌入 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 版本中被丢弃。

4

2 回答 2

1

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

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

答案可以在这里:

如何在 MFC 视图上显示 OpenCV Mat

于 2013-10-08T18:33:24.557 回答
1

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

于 2013-05-12T23:06:53.490 回答