基础学习笔记之opencv(6):实现将图片生成视频
基础学习笔记之opencv(6):实现将图片生成视频
在做实验的过程中。难免会读视频中的图片用来处理,相反将处理好的图片又整理输出为一个视频文件也是非经常常使用的。
以下就来讲讲基于opencv的C++版本号中图片输出视频是怎么实现的。
本次试验的数据为摇摆的树枝树叶图片,Waving Trees,其来源网址为: http://research.microsoft.com/en-us/um/people/jckrumm/WallFlower/TestImages.ht
该数据全由bmp图片组成。
本次试验的project环境为:opencv2.3.1+vs2010
实验功能:将多张bmp彩色图片生成一个avi格式的灰度视频文件。
在试验过程中。须要注意一下几点:
1.输出视频文件命名的处理和视频帧率的选择
2.输出视频文件格式的选择,好像opencv支持2种,一种是MIP1,和MJPG。
可是试验过程中发现假设选择MIP1不仅输出视频质量很差,且帧率不能控制。
3.关于视频输出是否为彩色问题见代码凝视部分。
以下是project代码:

// generate_vedio.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <stdio.h>
#include <iostream> using namespace cv;
using namespace std; int main(int argc, unsigned char* argv[])
{
String str_name="WavingTrees/b00";
char str[4]; Mat img_src,img_dst;
vector<Mat> 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);//输出灰度视频 int i=-1; namedWindow("src",WINDOW_AUTOSIZE);
while(1)
{
i++; /****图片名字读取前的处理****/
_itoa_s(i,str,10);
if(i<10)
str_name+="00";
else if(i<100)
str_name+="0";
str_name+=str;
str_name+=".bmp";
if(256==i)
return 0; /****输出原彩色视频****/
img_src=imread(str_name);
if(img_src.empty())
return 0;
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); /****延时处理****/
char c=(char)waitKey(10);
if(27==c)
return 0; str_name="WavingTrees/b00";
} return 0;
}

基础学习笔记之opencv(6):实现将图片生成视频的更多相关文章
- 基础学习笔记之opencv(24):imwrite函数的使用
http://www.cnblogs.com/tornadomeet/archive/2012/12/26/2834336.html 前言 OpenCV中保存图片的函数在c++版本中变成了imwrit ...
- 基础学习笔记之opencv(3):haartraining生成.xml文件过程[转]
1.准备正负样本: 在上一讲http://www.cnblogs.com/tornadomeet/archive/2012/03/27/2420088.html 中,我们已经收集到了训练所用的正样本. ...
- opencv学习笔记(六)直方图比较图片相似度
opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...
- 【C#编程基础学习笔记】4---Convert类型转换
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...
- 【C#编程基础学习笔记】6---变量的命名
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...
- 1.C#基础学习笔记3---C#字符串(转义符和内存存储无关)
技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com ------------------------------------- ...
- Java基础学习笔记总结
Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...
- Mysql数据库基础学习笔记
Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...
- 0003.5-20180422-自动化第四章-python基础学习笔记--脚本
0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...
随机推荐
- 基于WPF系统框架设计(1)-为什么要仿Office2010 Ribbon?
为什么系统框架设计使用Ribbon导航模式? 这得从Office软件的演变说起.微软为什么最后选择使用Ribbon,也许就是很多系统设计要使用Ribbon做功能导航的原因. 你是否还记得曾经使用过的M ...
- 如何部署和运行Scut服务器及游戏:Windows篇
概述 Scut游戏引擎是一个永久免费的全脚本游戏服务器框架,采用MVC框架设计,简化数据库设计和编码工作:降低对开发人员的开发难度:同时提供了丰富的类库和API接口. 一. 安装环境 必须安装的 ...
- ThinkPHP3.1 模板布局
ThinkPHP的模板引擎内置了布局模板功能支持,可以方便的实现模板布局以及布局嵌套功能.有三种布局模板的支持方式: 第一种方式:全局配置方式 这种方式仅需在项目配置文件中添加相关的布局模板配置,就可 ...
- EasyMvc入门教程-基本控件说明(1)按钮
按钮是我们最常用的控件之一了,先看下我们提供的按钮风格: 不同颜色的: 实现代码: @Html.Q().Button().Text("Danger").ColorDanger() ...
- 对数据进行GZIP压缩和解压
public class GzipUtils { /** * 对字符串进行gzip压缩 * @param data * @return * @throws IOException */ public ...
- iOS 一些struct类型的NSLog输出
我们经常会输出一些坐标尺寸信息之类的,比如view的frame,是CGRect类型的,用frame.oringial.x 和frame.size.width来做NSLog参数好麻烦,还好苹果对这些常用 ...
- CSS3 background属性
background: #00FF00 url(bgimage.gif) no-repeat fixed top; background 简写属性在一个声明中设置所有的背景属性. 可以设置如下属性: ...
- Linux下Nginx安全证书ssl配置方法
分享下我是如何一步步在Nginx上配置SSL的.首先,确保安装了OpenSSL库,并且安装Nginx时使用了–with-http_ssl_module参数. 初学者或者菜鸟建议使用LNMP进行一键安装 ...
- 使用OpenGL进行Mandelbrot集的可视化
Mandelbrot集是哪一集?? Mandelbrot集不是哪一集!! 啊不对-- Mandelbrot集是哪一集!! 好像也不对-- Mandelbrot集是数集!! 所以--他不是一集而是数集? ...
- 1-2:CSS3课程入门之结构选择
E:nth-child(n) 表示E父元素中的第n个字节点 p:nth-child(odd){background:red}/*匹配奇数行*/ p:nth-child(even){background ...