【opencv2】对视频的操作

转载请注明出处:http://blog.csdn.net/autocyz/article/details/44099179


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

对于VideoCapture,其有如下几个操作函数:

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

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

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

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

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

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

read(Mat& image) //获取、解码和读取视频的下一帧。在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 视频的四字符代码

       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函数的取值一样

 

对于VideoWriter,其有如下几个操作函数:

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

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

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

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

 

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

#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include 
#include 
#include 

using namespace std;
using namespace cv;

int main(int argc, const char** argv)
{
	Mat frame;
	VideoCapture video;
	VideoWriter markVideo;
	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);  //得到视频的一些参数
	//新建一个新的视频
        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;
}


你可能感兴趣的:(opencv2,opencv2实践)