基础学习笔记之opencv(6):实现将图片生成视频
//
#include "stdafx.h"
#include
#include
#include
#include
#include usingnamespace cv;
usingnamespace std;
intmain(intargc, unsignedchar* argv[])
{
String str_name="WavingTrees/b00";
charstr[4];
Mat img_src,img_dst;
vector img_gray;
img_src=imread("WavingTrees/b00000.bmp");
//使用VideoWriter时,假设须要写视频的文件不存在,则新建一个。假设存在,则必须是合法的视频文件。否则以下的语句会报错
//假设选择PIM1格式时,输出视频的帧率不能手动选择。且输出视频效果非常糟糕
//VideoWriter output_src("demo_src.avi",CV_FOURCC(‘P‘,‘I‘,‘M‘,‘1‘),2,img.size(),1);//输出彩色视频
//VideoWriter output_dst("demo_dst.avi",CV_FOURCC(‘P‘,‘I‘,‘M‘,‘1‘),25,img.size(),0);//输出灰度视频
//当用MJPG格式时,能够选择输出的帧率,且视频输出的效果也要好非常多,所以一般採用这样的格式输出
//最后一个參数isColor假设为非0的话,则表示输出3通道彩色视频。否则当isColor=0时输出为单通道黑白灰度视频
//只是此时当放入视频的图片为单通道图片时,输出的视频尽管是黑白灰度的,但是确同一时候有3幅图出现,即宽度压缩了3倍VideoWriter output_src("demo_src.avi",CV_FOURCC(‘M‘,‘J‘,‘P‘,‘G‘),10,img_src.size(),1);//输出灰度视频VideoWriter output_dst("demo_dst.avi",CV_FOURCC(‘M‘,‘J‘,‘P‘,‘G‘),10,img_src.size(),1);//输出灰度视频inti=-1;
namedWindow("src",WINDOW_AUTOSIZE);
while(1)
{
i++;
/****图片名字读取前的处理****/
_itoa_s(i,str,10);
if(i<10)
str_name+="00";
elseif(i<100)
str_name+="0";
str_name+=str;
str_name+=".bmp";
if(256==i)
return0;
/****输出原彩色视频****/
img_src=imread(str_name);
if(img_src.empty())
return0;
output_src<<img_src;
/****输出目标灰色视频****///这里用split函数的目的是为了给vector<Mat>型变量确定边界,假设没有此语句。
//则以下使用img_gray[1]就会觉得是错误的 split(img_src,img_gray);
cvtColor(img_src,img_gray[1],CV_BGR2GRAY);//这样输出的是彩色视频
//假设其他通道赋0的话,不是真正意义上的黑白灰度图,而是背景为蓝色的灰度图
// img_gray[0]=img_gray[2]=Mat::zeros(img_src.size(),img_gray[1].type());img_gray[0]=img_gray[2]=img_gray[1];//这样赋值才是真正意义上的黑白灰度图 merge(img_gray,img_dst);
//但这样输出的尽管是灰度视频,但是一副图像中包括了3个一样图,即图像宽度被压缩了3倍,why?
//且此时不能输出3通道的图片,否则生成的视频不能播放output_dst<<img_dst;
// output_dst<<img;
imshow("src",img_src);
/****延时处理****/charc=(char)waitKey(10);
if(27==c)
return0;
str_name="WavingTrees/b00";
}
return0;
}
来源: http://www.bubuko.com/infodetail-2047256.html