opencv c++ 视频处理与保存(23)

视频清晰度划分:

SD:标清

HD:高清

1、获取视频大小和帧数

    VideoCapture capture(videopath);

    //获取视频的宽高
    int frame_width = capture.get(CAP_PROP_FRAME_WIDTH);
    int frame_height = capture.get(CAP_PROP_FRAME_HEIGHT);
    //获取视频帧数
    int count = capture.get(CAP_PROP_FRAME_COUNT);//总帧数
    double fps = capture.get(CAP_PROP_FPS);//每秒帧数

官网:OpenCV: cv::VideoWriter Class Reference 

 2、保存视频

VideoWriter writer(filename, fourcc, fps, frameSize, isColor);

filename // string 文件名,一般包含路径

fourcc // int 压缩帧的模式(编解码),如果有输入来源视频,可以使用VideoCapture来获取,如:capture.get(CAP_PROP_FOURCC)

fps //double 视频帧率

framesize //Size 储存大小

isColor //bool 是否保存为彩色

使用示例:

先在循环层外定义:

VideoWriter writer("E:\\video_package\\savevideo.mp4", capture.get(CAP_PROP_FOURCC), fps, Size(frame_width, frame_height), true);

 在循环内逐个waitKey保存:

writer.write(frame);//frame为每个waitKey获取的视频Mat

最后在合适位置释放:

writer.release();

完整代码: 

void QuickDemo::video_demo(Mat& image)
{
	VideoCapture capture(videopath);
	//获取视频的宽高
	int frame_width = capture.get(CAP_PROP_FRAME_WIDTH);
	int frame_height = capture.get(CAP_PROP_FRAME_HEIGHT);
	//获取视频帧数
	int count = capture.get(CAP_PROP_FRAME_COUNT);//总帧数
	double fps = capture.get(CAP_PROP_FPS);//每秒帧数
	cout << "frame_width:" << frame_width << endl;
	cout << "frame_height:" << frame_height << endl;
	cout << "count:" << count << endl;
	cout << "fps:" << fps << endl;
	VideoWriter writer("E:\\video_package\\savevideo.mp4", capture.get(CAP_PROP_FOURCC), fps, Size(frame_width, frame_height), true);
	Mat frame;
	while (true) {
		int c = waitKey(fps);
		if (c == 27) {//退出
			break;
		}
		else if(frame.empty()){
			break;
		}
		capture.read(frame);
		writer.write(frame);
		int h = frame.rows;
		int w = frame.cols;
		resize(frame, frame, Size(w / 2, h / 2), 0, 0, INTER_LINEAR);
		// TODO,框图等操作,颜色变换
		imshow("frame", frame);
	}
	//完成后需要释放空间
	capture.release();
	writer.release();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值