在mfc中用opencv显示视频为:
while(pFrame=cvQueryFrame(pCapture))
{
DrawPicToHDC(pFrame, IDC_STATIC);
cvShowImage("Show",pFrame);
if(cvWaitKey(33)>0)
break;
}
但如果将cvShowImage("Show", pFrame)注释掉,则cvWaitKey将不起作用。
在【1】中给出了隐藏窗口"raw"的代码:
cvNamedWindow("raw");
HWND hWnd = (HWND)cvGetWindowHandle("raw");
HWND hRawWnd = ::GetParent(hWnd); //获得父窗口句柄
ShowWindow(hWnd, 0); //0:的时候表示隐藏子窗口
ShowWindow(hRawWnd, 0); //0:的时候表示隐藏父窗口
自己直接用这个段代码时,产生错误:
'CWnd::ShowWindow' : function does not take 2 arguments
根据MSDN中【2,3】以及【4】,将ShowWindow改为::ShowWindo即可,就可以不产生opencv窗口,而cvWaitKey起作用。
但正如【5】所说,就是每次创建的时候一定先显示出来再隐藏,会造成屏幕上闪过一个窗口,其中一个解答者说:
“按照我的建议,我觉得鼠标响应这种东西,都用MFC的来做好了,没必要让OpenCV自己的窗口和MFC的窗口混杂在一起(消息循环啥的MFC和OpenCV的都不一样,你混杂在一起,迟早要出问题)。MFC下作鼠标响应易如反掌的啊。”
我觉得在mfc中驱动视频