【问题标题】:How to display opencv frames in MFC?如何在 MFC 中显示 opencv 帧?
【发布时间】:2013-05-12 19:27:01
【问题描述】:

我正在编写一个 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版本中被丢弃了。

【问题讨论】:

  • 嗨,你有没有发现无论如何要在 mfc 中使用 opencv,或者 mfc 不适合使用 opencv,我也在寻找一些可以告诉你在 c++ 中使用什么来开发计算机视觉应用程序

标签: opencv mfc webcam


【解决方案1】:

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

【讨论】:

  • 这个方法对我不起作用。我终于放弃了使用 MFC。
【解决方案2】:

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

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

答案可以在这里:

How to display OpenCV Mat on MFC View

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    相关资源
    最近更新 更多