opencv学习笔记(三)视频播放控制

本文档详细介绍了如何使用OpenCV进行视频播放控制,包括理解程序逻辑、回调函数的概念、cvGetCaptureProperty()的使用,以及如何通过cvCreateTrackbar()创建滑动条来调整视频播放位置。还讨论了cvSetCaptureProperty()、cvQueryFrame()和cvSetTrackbarPos()等函数在视频播放中的应用。
摘要由CSDN通过智能技术生成

这个程序我们通过通过加入滚动条来控制视频的播放。

代码如下:

#include <opencv2/opencv.hpp>


using namespace std;  
using namespace cv;  
  
int g_slider_position = 0;  
int n = 0;  //定义一个全局变量,控制滚动条的位置  
CvCapture *g_capture = NULL;  
  
/* 当滚动条被拖动时,g_slider_position的值被设置为滚动条拖动后的位置 ,  
且g_slider_position作为参数传入onTrackbarSlide函数 
*/   
void onTrackbarSlide( int pos )  
{  
cvSetCaptureProperty( g_capture, CV_CAP_PROP_POS_FRAMES, pos );  
// 输出的值是一样的    
n = pos;  
return;  
}   
int main()  
{  
cvNamedWindow( "Example3", CV_WINDOW_AUTOSIZE );  
// CvCapture *capture = cvCreateFileCapture("E:\\FilesOutput\\test.avi");  
// 该avi文件必须为x-vid格式,要么电脑上要装解码器    
g_capture = cvCreateFileCapture("1.wmv");  
  
int frames = (int)cvGetCaptureProperty( g_capture, CV_CAP_PROP_FRAME_COUNT );  
  
if( frames != 0 )  
{  
// "position"表示滚动条的名词,"Example3"表示滚动条所属窗口, g_slider_position表示滚动条当前位置   
// frames表示滚动条的最大值,onTrackbarSlide表示滚动条的回调函数(被拖动时调用)  
cvCreateTrackbar( "position", "Example3", &g_slider_position, frames, onTrackbarSlide );  
}  
  
IplImage *frame = NULL;  
  
while(1)  
{  
frame = cvQueryFrame(g_capture);  
  
if(!frame)  
{  
break;  
}   
  
cvShowImage( "Example3", frame );  
cvSetTrackbarPos( "position", "Example3", n++ );   
char c = cvWaitKey(33);   
if( c == 27 )  // 按下esc 退出   
{  
break;  
}   
cout << g_slider_position << endl;   
}  
cvReleaseCapture(&g_capture);  
cvDestroyWindow("Example3");    
return 0;  

}  

3.1程序理解

        从本质上说,这种方法是通过添加一个全局变量来表示滚动条位置并且添加一个回调函数更新变量以及重新设置视频读入位置。

    首先为滚动条位置定义一个全局变量。由于回调函数需要使用CvCapture对象,因此我们将它定义为全局变量,为了是我们的程序可读性更强,我们在全局变量名称前面加上g_

                  int g_slider_position = 0;

                  CvCapture *g_capture = NULL;

那么我们这里所说的回调函数是哪一个呢?应当是:

void onTrackbarSlide( int pos )

因为在主程序里, 函数

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

}  的一个参量就是函数onTrackbarSlide,可见它是被调用的,所以是回调函数。

     从主函数main开始看:

1、创建一个窗口——显示用;

2、通过cvCreateFileCapture(要播放的视频名)确定要播放的视频;

3、通过cvGetCaptureProperty()获取视频的总帧数

4、如果总帧数!=0——创建进度条;

返回的帧数为0时,进度条不会被创建。这是因为对于某些编码方式,总的帧数获取不到,在这种情况下,我们只能直接播放视频文件而看不到进度条。

5cvCreateTrackbar()用来创建进度条。一旦滚动条被拖动,回调函数就会被调用,并且滚动条的新位置值就会传入回调函数中。

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

其中的&g_slider_position就代表滚动条的新位置值

——&g_slider_position是一个整数指针(I think就是指向一个整数作为参数传入回调函数void onTrackbarSlide(in

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值