我正在编写一个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版本中被丢弃。
答案 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.
答案可以在这里找到: