//使用opencv对视频进行播放控制,实现指定位置的播放
//缺陷1:只能拖动滑动条进行控制,单击滑动条位置不能准确定位,差距很大,(并不懂)
//缺陷2:视频是由无数张图像组成的,滑动条只
//2015-08-19 下午
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
using namespace std;
using namespace cv;
int gSliderPosition = 1;
CvCapture *gcvCapture = NULL;
//cvCreateTrackbar的回调函数
void on_change(int pos)
{
cvSetCaptureProperty(gcvCapture,CV_CAP_PROP_POS_FRAMES,pos);
}
//创建滑动条,对视频进行控制
void CreateTrackbar(char *pWindTitle,int frames)
{
cvCreateTrackbar("position",pWindTitle,&gSliderPosition,frames,on_change);
int position = 1;
on_change(position);
}
int main()
{
char *pWindowTitle = "video";
//读取视频文件
cvNamedWindow(pWindowTitle,CV_WINDOW_AUTOSIZE);
gcvCapture = cvCreateFileCapture("141.avi");
int frames = (int)cvGetCaptureProperty(gcvCapture,CV_CAP_PROP_FRAME_COUNT); //获取视频总帧数
if(0 != frames)
{
//创建滑动条
CreateTrackbar(pWindowTitle,frames);
}
IplImage *pImage = NULL;
while(1)
{
//获取文件的每一帧
pImage = cvQueryFrame(gcvCapture);
//对图像进行平滑处理
cvSmooth(pImage,pImage);
if(!pImage)
break;
cvShowImage(pWindowTitle,pImage);
char c = cvWaitKey(2);
if (c==27) //按esc退出
break;
}
cvReleaseCapture(&gcvCapture);
cvDestroyAllWindows();
return 0;
}