1.0.2-学习Opencv与MFC混合编程之---为播放AVI视频添加滑动条

 

源代码地址:http://download.csdn.net/detail/nuptboyzhb/3961642

版本1.0.2新增内容

Ø  全局变量和函数的添加:

在CVMFCview.cpp文件中增加全局变量和全局函数

//-----------------全局变量和函数---------------------------------------

int g_slider_position=0;

CvCapture *g_capture;

void onTrackbarSlide(int pos)

{

   cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);

}

//--效果如下:

注意:上述全局函数,不能作为类得成员变量的形式添加

Ø  改写void CCVMFCView::OnPlAYAVITEST()函数

具体代码如下:

void CCVMFCView::OnPlAYAVITEST()

{

         // TODO: Add your command handler code here

         //郑海波 2011年12月9日

         //参考:learning opencv  Page21

         CString csFilter="AVI Files(*.AVI)|*.AVI||";

         CString strFileName;

 

         CFileDialog FileDlg(true,NULL,NULL,OFN_HIDEREADONLY,csFilter);//  文件存盘对话框

         if (FileDlg.DoModal()==IDOK )

         {         //  选择了文件名

                   strFileName = FileDlg.m_ofn.lpstrFile;

                   if (FileDlg.m_ofn.nFileExtension == 0)

                   {  //  无文件后缀

                            strFileName = strFileName + ".avi";

                            //  加文件后缀

                   }

                   CString WindowName1="Display by CV";//创建窗口的名称

                   cvNamedWindow(WindowName1,CV_WINDOW_AUTOSIZE);//创建窗口

                  //CvCapture *capture =cvCreateFileCapture(strFileName);//由待播放的视频名,创建CvCapture指针

                   //----------------------------------------------------------------

                   g_capture =cvCreateFileCapture(strFileName);//由待播放的视频名,创建CvCapture指针

                   int frames=(int)cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);//得到视频中帧的总数

                   if(frames!=0)

                   {

                            cvCreateTrackbar("position",WindowName1,&g_slider_position,frames,onTrackbarSlide);

                   }

                   //----------------------------------------------------------------

                   IplImage *frame;//创建图像指针 用作显示的图片

                   while(1)

                   {

                            frame=cvQueryFrame(g_capture);//从g_capture 获取一帧图像

                            if(!frame)

                            {

                                     break;

                            }

                            cvShowImage(WindowName1,frame);

                            char c=cvWaitKey(33);//等待33毫秒,如果无按键,返回值c=-1。如果有按键,返回按键的ASCII值

                            g_slider_position++;//

            cvCreateTrackbar("position",WindowName1,&g_slider_position,frames,onTrackbarSlide);

            if(c==27)//27是Esc按键的ASCII值

                            {

                                     break;//按下ESc键,停止播放

                            }

                   }

                   cvReleaseCapture(&g_capture);

                   cvDestroyWindow(WindowName1);

         }

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
////////////////////////////////////////////////////////////////////// // 使用说明: // 1. 安装VS2008 // 2. 安装OpenCV2.0 // 3. 安装cmake2.8.6 // 4. 通过cmake生成可以被VC++ 2008调用的OpenCV动态库 // 5. 配置Windows环境变量Path,将OpenCV2.0安装后的bin文件夹目录添加入用户变量 // 使得Path=.../bin // (...是OpenCV2.0安装后的program files下的目录全路径) // 6. 打开VC++ 2008,菜单中的工具→选项→项目和解决方案→VC++目录 // 在显示以下内容的目录中, // 先选中可执行文件,加入目录...\bin // 再选中包含文件,加入目录...\include\opencv // 再选中库文件,加入目录...\lib // (...是OpenCV2.0安装后的program files下的目录全路径) // 7. 新建MFC对话框项目VideoPlayer // 然后再在它的属性里去掉更换Unicode的字符集为多字节集 // 配置链接器的输入依赖项cxcore200.lib cv200.lib highgui200.lib // 8. 或者是不进行7的操作,直接将本程序对新建的VideoPlayer对话框项目进行覆盖 // 然后再对其中的VideoPlayer对话框项目配置属性进行修改 ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// // 功能说明: // 1. slider控件、Picture控件、打开按钮、播放按钮、暂停按钮、停止按钮 // 2. 实现视频的加载、播放、暂停、停止,以及通过滑动进行视频播放进度的控制 ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// // 存在的问题: // 1. 有些视频并不是有多少帧就多少帧结尾 // 比如用屏幕录像机录像的avi,比如录了帧,它有时会丢帧, // 丢帧的那个位置,无法用IplImage的图像空间来加载视图,那程序调试就会报错 // 2. 基本的功能都实现了,就缺验证它的执行效率,还有是否会存在内存泄漏 ////////////////////////////////////////////////////////////////////// 解压密码和相关信息参看http://www.cnblogs.com/huangweilin/archive/2012/05/18/2507764.html

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值