利用opencv窗口显示视频的原理与显示图片的原理差不多:
这就是用USB网络摄影头的成像效果,做的时候,发现这个程序现在存在一个问题,就是在关闭窗口后,进程中仍然有这个程序在执行:
解决这个问题有两个方法:
第一种:
在while循环中加入一个标志m_flag,在退出程序时,将其置为1即可,程序如下:
while(1)
{
if(m_flag==1) break;
pFrame = cvQueryFrame( pCapture );
//显示图像
CDC *pDC = GetDlgItem(IDC_STATIC1)->GetDC();
HDC hDC= pDC->GetSafeHdc();
CRect rect;
GetDlgItem(IDC_STATIC1)->GetClientRect(&rect);
cimg.CopyOf(pFrame);
cimg.DrawToHDC(hDC,&rect);
//下面是重点,可以实现拖拽
MSG message;
if(::PeekMessage(&message,NULL,0,0,PM_REMOVE))
{
::TranslateMessage(&message);
::DispatchMessage(&message);
}
}
第二种:
不要用while循环,将 pFrame = cvQueryFrame(pCapture )放在OnTimer()中,然后在退出程序时,用KillTimer(1)即可结束进程。
我的程序采用的是第一种方法,但我感觉第二种方法更具有拓展性。
稍后我会把源代码传到网上,供大家学习交流。