opencv中视频的读取和写入

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/love_image_xie/article/details/87286928

主要使用VideoCapture类读视频,VideoWriter类写视频,这两个类在highgui头文件中。

读视频有两种方法。

//方法一
VideoCapture capture;
// 读取视频文件
capture.open("..\\images\\car.avi");
//  判断视频流读取是否正确
if(!capture.isOpened())
{
	std::cout << "fail to open video!" << std::endl;
	return -1;
}

//方法二
string inputPath = "..\\images\\car.avi";
//视频读入
VideoCapture capture(inputPath);

具体使用如下:

int main()
{
	string inputPath = "E:\\研究生\\学习材料\\学习书籍\\OpenCV图像处理编程实例-源码-20160801\\《OpenCV图像处理编程实例-源码-20160801\\images\\car.avi";
	string outPath = "E:\\研究生\\学习材料\\学习书籍\\OpenCV图像处理编程实例-源码-20160801\\《OpenCV图像处理编程实例-源码-20160801\\images\\carTest.avi";
	//视频读入
	VideoCapture input(inputPath);
	//  判断视频流读取是否正确
	if (!input.isOpened())
		return -1;
	VideoWriter output;
	//获取视频分辨率
	Size videoResolution = Size((int)input.get(CV_CAP_PROP_FRAME_WIDTH),(int)input.get(CV_CAP_PROP_FRAME_HEIGHT));
	//获取帧率
	double fps = input.get(CV_CAP_PROP_FPS);
	cout << "fps: " << fps << endl;
	//获取总帧数
	cout << "total Frame: " << input.get(CV_CAP_PROP_FRAME_COUNT)<<endl;
	//获取宽高
	cout << "Resolution: " << videoResolution.width << videoResolution.height << endl;
	output.open(outPath, -1, 25, videoResolution, true);
	if (!output.isOpened())
		return -1;
	Mat frameImg;
	int count=0;
	vector<Mat> rgb;
	Mat result;
	for (int i = 0; i < 300; i++)
	{
		input >> frameImg;
		//视频帧结束判断
		if (!frameImg.empty())
		{
			count++;
			imshow("frameImg", frameImg);
			split(frameImg, rgb);
			for (int j = 0; j < 3; j++)
			{
				if (j != 1)
					rgb[j] = Mat::zeros(videoResolution, rgb[1].type());
			}
			merge(rgb, result);
			imshow("result", result);
			output << result;
		}
		else
			break;
		if (char(waitKey(1)) == 'q')
		{
			input.release();
			output.release();
			break;
		}
	}
	cout << "count: " << count << endl;
	input.release();
	output.release();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/love_image_xie/article/details/87286928