OpenCV图像序列生成视频,MATLAB图像生成avi视频,image2video。

讲解如何利用OpenCV合成avi格式视频。

在处理图像和视频的过程中,通常会遇到将视频转换成图像处理,或者将处理完的图像合成原视频。在基于视频的处理过程中,通常都是先将视频转换为每一帧图像,然后基于图像去处理。OpenCV有很多关于Video2Image的相关算法代码。注意,视频转图像过程中,只要有OpenCV配置好了,正常条件下都可以转换成图像。不依赖其他库,不依赖第三方库。

将图像转合成视频的过程中,需要将图像保存在一个文件夹下,然后用OpenCV来的videowriter类来添加一帧一帧图像,最后合成avi视频。注意,OpenCV只能合成avi格式的视频。按照常规步骤,就合成了视频。但是,此时可以看到,视频文件是生成了,但是大小是0kb。算法不会报错,但是并没有生成视频。注意,这是缺少第三方库,如下图所示。没有任何信息。

以上是用OpenCV生成的视频。

从这里可以看出,没有任何信息。说明没有生成成功。

通过各种查找,需要将 opencv_ffmpeg247.dll 以及opencv_ffmpeg247_64.dll这两个dll文件放在工程目录下面,以及exe文档下面。如下图所示。 可以在这个链接下载这两个文件。自己改为支持版本的名字即可。比如opencv3.1.0就将dll改为opencv_ffmpeg310.dll。  opencv_ffmpeg247图像转视频库下载。基于OpenCV。

现在可以看到,生成的文件,具有大小,以及可以用了。但从最后结果看,虽然有具体大小的信息,但是在详细信息里面,并没有帧率,像素大小等信息,很多手机还看不了,只能借助播放器才能看,比如qq影音。

具体代码如下:

    //创建一个写视频类,格式设定为MJPG,还有其他格式,自己可以改;
    //注意,后缀只能是avi;帧率自己可以设置,设置为50fps,或者80。都可以自己修改。

    //大小尽量和原始图像保持一致。

#include "opencv2/opencv.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <opencv2/core/core.hpp>

using namespace std;
using namespace cv;

int main(int argc,char **argv)
{
	//创建一个写视频类,格式设定为MJPG,还有其他格式,自己可以改;
	//注意,后缀只能是avi;
	VideoWriter writer("E:\\high_speed_vision\\rereslut_50fps.avi", CV_FOURCC('M', 'J', 'P', 'G'), 50, Size(512,512),1);
	//int i=0;
	int count=0;
	for (int i = 0; i <172; i++)
	{
		//读取原始图像;
		Mat src=imread("E:\\high_speed_vision\\original\\"+to_string(i)+".png",1);
		if(src.empty())
		{
			cout<<"null"<<endl;
		}
		resize(src,src,Size(512,512));
		//将图像写入视频;
		writer.write(src);

		namedWindow("show image");
		imshow("show image", src);
		waitKey(10);
		count++;
	}
	cout<<"count is:"<<count<<endl;
	waitKey(0);
	writer.release();
}

                                                                                                                                                                                                                                                                                           MATLAB合成视频                                                                                              

其实,为了可以方便的生成视频,也可以用MATLAB来做视频。 MATLAB写视频或许更方便,不需要第三方的依赖库。

我当时的视频在手机放不能看,虽然用OpenCV生成了视频,但是最后还是用MATLAB来合成了视频。代码如下:

clc; clear all;
%定义生成视频的名称和位置;
writerObj = VideoWriter('tracking_50fps.avi');
%设置帧率;
writerObj.FrameRate=50;
open(writerObj);
%图像存放地点;
pt = 'F:\video_generate\result_every\';


%循环遍历所有图像,写进去就是;
for k = 1:171
    image = imread([pt,num2str(k),'.png']);
    writeVideo(writerObj,image);
end

close(writerObj);

最后能看到详细信息如下:

猜你喜欢

转载自blog.csdn.net/qq_32998593/article/details/82585532