##名称:利用videowriter实现多张连续图片合成avi视频
##平台:QT5.7.1+OpenCV3.2.0
##日期:2017年12月10日
/**************新建QT控制台程序**************/
#include <QCoreApplication>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat image;
char filename[75]; //定义数组,其中数组大小大于等于图片的个数
int isColor = 1; //如果为0 ,可输出灰度图像
int fps = 10; //设置输出视频的帧率
//int frameWidth = image.cols; //单帧图片的宽
//int frameHeight = image.rows; //单帧图片的高
VideoWriter writer("/home/ttwang/images/video_out.avi", VideoWriter::fourcc('M', 'J', 'P', 'G'), fps,
Size(640, 360),isColor);
for(unsigned int i=0;i<1000;i++)
{
sprintf(filename,"/home/ttwang/images/image%d.jpg",i);//第二个参数是指定图片路径和图片名的一般式(image%d)
image=imread(filename);//导入图片
if (image.empty())
{
break;
}
waitKey(0);
//cout << image.channels() << endl; //为了解决问题而打印查看图片的通道
//cout << image.size() << endl; //为了解决问题而打印图片的尺寸
writer.write(image); //
}
}
错误调试分析:
#起初定义单帧图片尺寸时,读取原图的行和列,如下定义时:
int frameWidth = image.cols; //单帧图片的宽
int frameHeight = image.rows; //单帧图片的高
#VideoWriter的参数Size()如是这样读:
Size(frameWidth,frameHeight)
#出现如下错误:
OpenCV Error: Assertion failed (img.cols == width && img.rows == height && channels == 3) in write,
file /home/ttwang/opencv-3.2.0/modules/videoio/src/cap_mjpeg_encoder.cpp, line 829
调试语句:
#1.打印图片的通道数看是否为3
cout << image.channels() << endl;
打印输出:3
说明没有错误
#2.可能是单帧尺寸不对,
cout << image.size() << endl;
打印输出:640X360
为此将Size()的参数改为 Size(640,360) 编译通过
对于为什么我那样定义是错的,始终没有搞明白,希望有人解答