OpenCV chm 文档下载http://download.csdn.net/detail/u010944555/5718997
#include "highgui.h"
#include "cv.h"
int frame_count = 0; //用于随视频播放更新滚动条的位置
int g_slider_position = 0;//初始时滚动条的位置
CvCapture* capture = NULL; //读取视频后在CvCapture内存放的指针
void onTrackbarSlide(int pos)//在cvGetCaptureProperty内要调用的回调函数 在滚动条的位置发生改变时调用
{
cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, pos);//设置视频帧的读取位置
frame_count = pos;
}
int main( int argc ,char ** argv)
{
capture = cvCreateFileCapture ("Backkom.avi"); //读取视频
if(capture==NULL)
{
printf("NO capture"); //读取不成功,则标识
return 1;
};
float fps=cvGetCaptureProperty(capture, CV_CAP_PROP_FPS ); //读取视频的帧率
float vfps = 1000 / fps; //计算每帧播放的时间
printf("%5.1f\t%5d\n",fps,vfps);
float frames=cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_COUNT);//读取视频中有多少帧
printf("frames is %f\n",frames);
cvNamedWindow("example",CV_WINDOW_AUTOSIZE); //定义窗口 显示每帧图像
if( frames!= 0)
{
//在名为example的窗口上设置滚动条,滚动条名为Position, onTrackbarSlide 为之前定义的回调函数
cvCreateTrackbar("Position", "example", &g_slider_position, frames, onTrackbarSlide);
printf("Create trackbar successfully!");
}
IplImage * frame;//定义图像指针
while(1)
{
frame = cvQueryFrame( capture ); //抓取帧
float ratio = cvGetCaptureProperty(capture, CV_CAP_PROP_POS_AVI_RATIO); //读取该帧在视频中的相对位置
//printf("%f\n",ratio);
if(!frame)break;
cvShowImage("example",frame); //显示
char c = cvWaitKey(vfps);//等待vfps毫秒并获取按键 没有按键则返回-1
if(c == 27 )//Esc键值为27
break;
//随视频播放 更新滚动条位置
cvSetTrackbarPos("Position","example", frame_count);
frame_count++;
}
//释放
cvReleaseCapture(&capture);
cvDestroyWindow("example");
return(0);
}
cvSetCaptureProperty
设置视频获取属性
int cvSetCaptureProperty( CvCapture* capture, int property_id, double value );
capture
视频获取结构。
property_id
属性标识符。可以是下面之一:
CV_CAP_PROP_POS_MSEC - 从文件开始的位置,单位为毫秒
CV_CAP_PROP_POS_FRAMES - 单位为帧数的位置(只对视频文件有效)
CV_CAP_PROP_POS_AVI_RATIO - 视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)
CV_CAP_PROP_FRAME_WIDTH - 视频流的帧宽度(只对摄像头有效)
CV_CAP_PROP_FRAME_HEIGHT - 视频流的帧高度(只对摄像头有效)
CV_CAP_PROP_FPS - 帧率(只对摄像头有效)
CV_CAP_PROP_FOURCC - 表示codec的四个字符(只对摄像头有效)
value
属性的值。
函数cvSetCaptureProperty设置指定视频获取的属性。目前这个函数对视频文件只支持: CV_CAP_PROP_POS_MSEC, CV_CAP_PROP_POS_FRAMES, CV_CAP_PROP_POS_AVI_RATIO
cvCreateFileCapture
初始化从文件中获取视频
CvCapture* cvCreateFileCapture( const char* filename );
filename
视频文件名。
函数cvCreateFileCapture给指定文件中的视频流分配和初始化CvCapture结构。
当分配的结构不再使用的时候,它应该使用cvReleaseCapture函数释放掉。
cvQueryFrame
从摄像头或者文件中抓取并返回一帧
IplImage* cvQueryFrame( CvCapture* capture );
capture
视频获取结构。
函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。返回的图像不可以被用户释放或者修改。