opencv3.2.0实现连续图片合成avi视频


##名称:利用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) 编译通过 对于为什么我那样定义是错的,始终没有搞明白,希望有人解答

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM