mfc窗口显示视频+抓图

利用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)即可结束进程。

 

 

我的程序采用的是第一种方法,但我感觉第二种方法更具有拓展性。

稍后我会把源代码传到网上,供大家学习交流。

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: DirectShow 是一种用于多媒体应用程序开发的Microsoft技术,可以实现视频的实时显示抓图,并且还可以设置视频参数。在DirectShow,可以通过构建图形和过滤器图来实现这些功能。 首先,要实现视频的实时显示,我们需要创建一个视频捕捉过滤器,并连接到显示过滤器。通过DirectShow提供的接口,可以选择摄像头设备作为视频源,然后创建一个Sample Grabber过滤器用于捕获视频图像。Sample Grabber过滤器可以设置回调函数,在视频数据接收时即时处理图像数据。然后将捕捉到的视频数据通过DirectShow的某个视频渲染器过滤器进行显示,如VideoRenderer。 其次,要实现视频抓图,可以使用Sample Grabber过滤器,捕获图像后保存为位图格式或其他图像格式。我们可以在回调函数获取图像数据,并将其保存为图像文件。这样,我们就能够实现对视频流的实时截图。 最后,DirectShow还可以设置视频参数,如帧率、分辨率、亮度、对比度等。通过获取视频源过滤器的接口,可以设置这些参数,以调整视频显示效果。 综上所述,直接展示和抓取图像的方法包括创建视频捕捉过滤器、Sample Grabber过滤器和视频渲染器过滤器,并利用回调函数处理图像数据实现实时显示抓图。此外,还可以通过DirectShow接口设置视频参数,以改变视频显示效果。 ### 回答2: DirectShow是一套功能强大的多媒体框架,可以用于实现视频的实时显示抓图,并且还可以设置视频的参数。 要实现视频的实时显示,首先需要使用DirectShow创建一个图形化用户界面窗口,并将视频源与该窗口进行关联。可以使用DirectShow提供的基本组件来实现这一功能,比如视频捕捉组件,将摄像头或者其他视频源的输入传递给视频渲染组件,然后通过渲染组件将视频显示窗口。 在实时显示视频的过程,我们可以设置视频的参数。DirectShow提供了丰富的接口和功能,可以通过控制接口对视频进行参数设置。例如可以调整视频的亮度、对比度、色彩饱和度等等。还可以调整视频的分辨率、帧率、编解码格式等参数,以满足具体应用场景的需求。 另外,DirectShow还可以实现视频抓图功能。通过调用DirectShow提供的接口,我们可以将当前视频帧保存为图像文件,以便于后续的处理和使用。可以设置抓图的分辨率和格式,以满足不同场景下的需求。 总结起来,DirectShow可以实现视频的实时显示抓图,还可以设置视频的参数。它是一个功能强大、灵活性高的多媒体框架,为开发者提供了丰富的接口和工具,以便于实现多样化的视频处理需求。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值