【OpenCV】视频的分帧并以任意的fps合帧处理

环境:OpenCV320(3.0以上版本都可以)

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

#include <iostream>

using namespace std;
using namespace cv;

void Image_to_video()
{
	int i = 0;
	Mat img;
	
	cout << "------------- image to video ... ----------------" <<endl;
	int fps = 8;		// or 25
	int frameW = 500;	//原视频的大小宽高
	int frameH = 500;	 
	
	VideoWriter writer("111.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, Size(frameW , frameH ), 1);
	
	while (i<150)
	{
		char image_name[256] = {0};
		sprintf(image_name, ".\\frame\\1 (%d).jpg",i);
		img = imread(image_name,IMREAD_ANYCOLOR);
		if (img.empty())
		{
			cout << "Could not load image file" << endl;
			return ;
		}
		

		cout << i << endl;
		i++;

		imshow("mainWin", img);
		waitKey(30);
		writer << img;
	}
}

void video_to_image()
{
	//视频分帧处理
	VideoCapture cap("123.avi");
	if (!cap.isOpened())
	{
		cout << "未能成功读取视频文件error" << endl;
		return ;
	}
	Mat image;
	int i = 0;
	while (1)
	{
		cap >> image;
		//int nRows = image.rows;				//500
		//int nCols = image.cols;				//500
		//cout << nRows << "," << nCols << endl;
		if (image.empty())
		{
			break;
		}
		char ch1[256] = { 0 };
		sprintf(ch1, ".\\frame\\1 (%d).jpg", i);
		i++;//i=150
		imwrite(ch1, image);

	}
}

int main()
{
	video_to_image();//视频转图像并进行保存

	Image_to_video();//通过读取图像按一定的帧率转视频
	
	return 0;
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值