MFC窗口视频显示方法--OpenCV VFW模式

这里将我看过的VC显示视频方法总结一下。一种看了三种方法。

方法一:OpenCV VFW

方法二:OpenCV DirectShow

方法三:直接的采用DirectShow,下面俄罗斯人写的

Video Preview and Frames Capture to Memory with SampleGrabber in Buffered Mode.

这些方法都是我编辑别人的,没有什么创新,只是一个使用方法。所以我只是介绍使用方法以及相关代码,可能有其他更好的办法。我只是一个刚刚入门者,有不妥之处,敬请拍砖。

 

OpenCV内置视频显示是采用VFW模式,我用的版本是2.45

代码如下:

1:先引入

#include <cv.h>
#include <highgui.h>

2:头文件定义变量

 CvCapture* m_Camera; 

 IplImage* m_CameraFrame;

3、设置一个按钮,定义事件

 

 

void CEVisionDlg::OpenVideo()
{
 m_CameraFrame = 0;
 m_Camera = 0;

 HWND hWnd;
 HWND hParent;

 RECT rcDlg; //ScreenToClient

 int vWndType1Height;
 int vWndType1Windth;

 m_Camera = cvCreateCameraCapture( CV_CAP_ANY );
 
 int intCamSRCWidth,intCamSRCHeight;
 int intImgSRCHeight,intImgSRCWindth;

 intCamSRCWidth=640;
 intCamSRCHeight=480;

 intImgSRCWindth=640;
 intImgSRCHeight=480;

  cvSetCaptureProperty( m_Camera, CV_CAP_PROP_FRAME_WIDTH, double(intCamSRCWidth));
  cvSetCaptureProperty( m_Camera, CV_CAP_PROP_FRAME_HEIGHT, double(intCamSRCHeight));


  intCamSRCWidth = int(cvGetCaptureProperty( m_Camera, CV_CAP_PROP_FRAME_WIDTH));
  intCamSRCHeight = int (cvGetCaptureProperty( m_Camera, CV_CAP_PROP_FRAME_HEIGHT));

 if (m_Camera > 0) 
 {

   GetDlgItem(IDC_SHOW_IMG)->GetWindowRect(&rcDlg);
  vWndType1Windth = rcDlg.right - rcDlg.left -10;
  vWndType1Height = vWndType1Windth * intImgSRCHeight;
  vWndType1Height = vWndType1Height / intImgSRCWindth; 

  cvNamedWindow("AIWndSrcCamera", CV_WINDOW_AUTOSIZE); //创建一个新窗口
  hWnd = (HWND) cvGetWindowHandle("AIWndSrcCamera");  //通过名字获取窗口句柄
  hParent = ::GetParent(hWnd);      

  ::SetParent(hWnd, GetDlgItem(IDC_SHOW_IMG)->m_hWnd);  

  ::ShowWindow(hParent, SW_HIDE);
 
  cvResizeWindow("AIWndSrcCamera", vWndType1Windth,vWndType1Height);
  IplImage* m_pFrame = cvCreateImage( cvSize(intImgSRCWindth,intImgSRCHeight), IPL_DEPTH_8U, 3);
  while (true)
  {
   m_CameraFrame =cvQueryFrame (m_Camera);
   if(!m_CameraFrame)
    return;
   else
   {
    if( m_CameraFrame->origin == IPL_ORIGIN_TL )
     cvResize (m_CameraFrame, m_pFrame, CV_INTER_NN);
    else
     cvFlip( m_CameraFrame, m_pFrame, 0 );

    cvShowImage("AIWndSrcCamera", m_pFrame);
    if ((cvWaitKey(10) & 255) == 27 ) return ; 

    
   }

  }

  cvReleaseImage(&m_pFrame); 
 }
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值