程序员人生 网站导航

【opencv2】对视频的操作

栏目:php教程时间:2015-03-26 09:27:58

opencv2中,提供了两个视频操作相干的类,VideoCaptureVideoWriter,固然也有相对应的构造函数。

VideoCapture,其有以下几个操作函数:

open(const string &filename)    //打开视频文件

open(int device)              //打开摄像头,device为装备序号

isOpened()   //判断视频文件或摄像头是不是打开,其返回值为bool

release()   //关闭视频文件或摄像头

grab()     //获得视频或摄像头下1帧,若获得成功,则返回TRUE,其函数类型也是bool型。

retrieve(Mat& image , int channel=())  //解码刚刚获得到的1帧图象,并将其赋给image,这个函数的返回值也是bool型。

read(Mat& image) //获得、解码和读取视频的下1帧。在opencv中,其用“>>”操作符重载了这个函数,即  video >> image

get(int propId)  //返回视频的属性

       propId取值不同,则返回的属性也不同。当propId取以下值时:

       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 视频的4字符代码

       CV_CAP_PROP_FRAME_COUNT  视频的总帧数

       CV_CAP_PROP_FORMAT  视频的图片格式

       CV_CAP_PROP_MODE  后端特定值唆使当前捕获模式

       下面几个属性只在摄像模式下有效:

       CV_CAP_PROP_BRIGHTNESS  图象的亮度

       CV_CAP_PROP_CONTRAST    图象对照度

       CV_CAP_PROP_SATURATION  图象的饱和度

       CV_CAP_PROP_HUE          图象的色度

       CV_CAP_PROP_EXPOSURE    图象的暴光

       CV_CAP_PROP_CONVERT_RGB图象是不是转换为RGB

set(int propId)  //设置属性,其参数的取值和get函数的取值1样

 

VideoWriter,其有以下几个操作函数:

open(const string &filename, int fourcc, double fps, Size frameSize, color = true)

    以上几个参数在上文中均已介绍过了。

isOpened()  //与前面的是1个意思

write(const Mat& image)  //opencv中也一样重载了这个函数,即用操作符<<

 

下面看段程序,程序的功能是将1个段视频变小,即原来1024*780的视频,变成320*280,为了多使用几个视频操作函数,所以有些地方可以大大简化或修改的我没有修改,为了展现1下各个函数的用法。

#include "opencv2/objdetect/objdetect.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <opencv2/opencv.hpp> #include <iostream> #include <stdio.h> using namespace std; using namespace cv; int main(int argc, const char** argv) { Mat frame; VideoCapture video; VideoWriter newVideo; double fourcc, fps, width, height; video.open("25.avi"); //打开视频 fourcc = video.get(CV_CAP_PROP_FOURCC); fps = video.get(CV_CAP_PROP_FPS); width = video.get(CV_CAP_PROP_FRAME_WIDTH); height = video.get(CV_CAP_PROP_FRAME_HEIGHT); //得到视频的1些参数 //新建1个新的视频 markVideo.open("markVideo10.avi", fourcc, fps); if (video.isOpened() && markVideo.isOpened() ) { while(true){ video >> frame; //读取视频的每个帧 resize(frame, frame, Size(320, 280)); //将视频的每帧都缩小 if (!frame.empty()){ markVideo << frame; //将缩小后的每个帧都写进新的视频 } else{printf(" --(!) No captured frame -- Break!"); break;} if ((char)waitKey(1) == 'c') { video.release(); markVideo.release(); break; } } } return 0; }


------分隔线----------------------------
------分隔线----------------------------

最新技术推荐