利用opencv给视频截图

来源:互联网 发布:怎么看网络是公网ip 编辑:程序博客网 时间:2024/05/03 22:31

视频截图,仅仅实现了给AVI格式的视频截取图像,以后可以扩展。这里面视频和图像输出均与代码在同一个文件夹下。如果要输出到其他文件夹下,需要手动改变路径。


#include "highgui.h"#include <iostream>#include <windows.h>using namespace std;using namespace cv;int main(){CvCapture *capture;//视频捕获结构变量的定义capture=cvCaptureFromAVI("leslie_Red_DVD.avi");//获取视频int count=cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT );// 视频文件中帧的总数long t=1;//时间int num=200;//定义截取的图像数目,此处为200张,可自由定义int kNum=count/num;//定义帧位置stringstream s;//定义输出图像名称缓冲区IplImage* imgOut;//输出图像变量while(kNum<count){cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, kNum);//定义帧位置IplImage *img=cvQueryFrame(capture);//从视频中获取一帧imgOut=cvCreateImage(cvGetSize(img),img->depth,img->nChannels);//初始化输出cvCopy(img,imgOut,NULL);//复制图像char time[20];SYSTEMTIME sys = {0};GetLocalTime(&sys);sprintf(time, "%4d%02d%02d%02d%02d%02d%03d星期%1d",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek); //t=(long)cvGetTickCount();s<<"result"<<time<<".jpg";//char* image_name;//sprintf(image_name, "%s%d%s", "image", t, ".jpg");//保存的图片名//cvSaveImage(image_name, img);   //保存一帧图片cvSaveImage(s.str().c_str(),imgOut);//保存cvWaitKey(5);//等待s.str("");//清空图像名称缓冲区cvReleaseImage(&imgOut);//释放图像内存kNum+=count/num;//帧递增}cvReleaseCapture(&capture);//释放视频获取结构变量的内存}


1、关于cvGetCaptureProperty函数

该函数利用property_id属性来获取视频或者摄像头的一定属性值;函数原型为:

double cvGetCaptureProperty( CvCapture* capture, int property_id );
property_id的值主要利用到一下几个:

CV_CAP_PROP_POS_MSEC - 影片目前位置,为毫秒数或者视频获取时间戳
CV_CAP_PROP_POS_FRAMES - 将被下一步解压/获取的帧索引,以0为起点
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的四个字符
CV_CAP_PROP_FRAME_COUNT - 视频文件中帧的总数

2、关于cvSetCaptureProperty函数
设置视频或者摄像头获取结构的属性。函数原型如下:
int cvSetCaptureProperty( CvCapture* capture, int property_id, double value );
capture为获取结构,property_id为属性(详见cvGetCaptureProperty函数),value为要设置的值。
3、这里有一个视频播放的代码,实现了滚动条控制播放进程。链接如下:
OpenCV播放视频 加上滚动条



0 0
原创粉丝点击