基于MFC的OpenCV简单视频播放器

来源:互联网 发布:建筑公司法务 知乎 编辑:程序博客网 时间:2024/05/17 03:39




1.程序功能简介

我们点击OpenFile按钮,选取路径,然后点击Ok,显示或播放所选的图片或视频。


2.功能实现

2.1 Dlg类头文件中添加以下项:

public:

CString FileName;//记录所选文件路径
CRect rect;//关联图像控件矩形
    CStatic* pStc; //标识图像显示的Picture控件
    CDC* pDC; //视频显示控件设备上下文
HDC hDC; //视频显示控件设备句柄
CvCapture* capture; //视频获取结构


2.2 Dlg构造函数中初始化:

  pStc=NULL;
        pDC=NULL;
        capture=NULL;


2.3 Dlg::OnInitDialog()中添加如下代码:

        pStc=(CStatic *)GetDlgItem(IDC_VIEW);//IDC_VIEW为Picture控件ID
pStc->GetClientRect(&rect);//将CWind类客户区的坐标点传给矩形
        pDC=pStc->GetDC(); //得到Picture控件设备上下文
        hDC=pDC->GetSafeHdc(); //得到控件设备上下文的句柄 


2.4 OpenFile按钮消息响应函数添加如下代码:

CFileDialog dlg(TRUE);//TRUE为OPEN对话框,FALSE为SAVE AS对话框
if(dlg.DoModal()==IDOK) //建立模态对话框
FileName=dlg.GetPathName();
SetDlgItemText(IDC_EDIT1,(LPCTSTR)FileName);//将文件路径显示在文本控件中


2.5 OK按钮详细相应函数

if(!capture)
{
capture=cvCreateFileCapture((LPCTSTR)FileName);
}
if(!capture)
{
AfxMessageBox("Error!");
return;
}
SetTimer(1,25,NULL);

2.6 Dlg添加WM_TIMER事件响应

我们设置了定时器自动读取视频中的一帧,这里对Dlg添加WM_TIMER事件响应函数

if(1==nIDEvent)

{

IplImage* frame;
frame=cvQueryFrame(capture);
//cvGrabFrame( capture ); //从摄像头或者视频文件中抓取帧
        //frame=cvRetrieveFrame(capture); //取回由函数cvGrabFrame抓取的图像
CvvImage m_CvvImage;  
        m_CvvImage.CopyOf(frame,1); //复制该帧图像    
        m_CvvImage.DrawToHDC(hDC, &rect); //显示到设备的矩形框内
}

3.总结

注意CvvImage.h和CvvImage.cpp文件的添加,之前在网上找到了一个文件,添加后却一直编译不过,以为是自己程序有问题,后来发现是添加文件的问题,希望大家使用的时候也要注意此类问题。下面资源里的CvvImage.h和CvvImage.cpp文件亲测有效。

源代码资源:

http://download.csdn.net/detail/bright_geek/8163975





0 0
原创粉丝点击