基础学习笔记之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": " ...
随机推荐
- 盘点支持Orchard的.NET 4.5虚拟主机(虚拟空间)
Orchard作为.NET社区最为先进的开源项目之一,已经被越来越多的人使用, 由于它使用了最时髦的微软技术栈(.NET4.5),因此在 Win2008+和IIS7+ 的环境上运行最为完美, 而win ...
- 从C的声明符到Objective-C的Blocks语法
原文链接:http://nilsou.com/blog/2013/08/21/objective-c-blocks-syntax/ 在这个post中,我先以C简单和内置复杂的声明开始,直到我们开始接触 ...
- Resolving the Provisioning Profile Invalid Status
Q: What causes the provisioning profile "Invalid" status? How do I resolve it, and how do ...
- ios内存管理笔记(三)
我们在进行iOS开发时,经常会在类的声明部分看见类似于@synthesize window=_window; 的语句,那么,这个window是什么,_ window又是什么,两个东西分别怎么用,这是一 ...
- mac为photoshop添加字体
https://jingyan.baidu.com/article/a3761b2b8484321576f9aaac.html 一. 1)点击Launchpad 2)搜索“字体册” 二 打开字体册 三 ...
- EasyMvc入门教程-高级控件说明(15)方位布局控件
现在很多管理后台都流行全屏切割的布局,大体结构如下图所示: 大家注意到没,整个布局是五个部分组成:“东西南北中”,EasyMvc对应的实现的代码为: @(Html.Q().Layout().TextC ...
- 基于django的网站开发一基础项目配置
首先确认电脑上已经安装好了python和django,我的python版本是2.7.13,django版本是1.10.2.数据库我使用的是mysql,版本是5.7.17,我是windows7系统,用的 ...
- 苹果证书的申请、unityoc交互基础
注冊开发人员账号时:注意不要使用中国邮箱 99美金证书 :仅仅支持上传AppStore. 299美金证书:指的的我开发的应用是仅仅支持打包安装.企业级的. 假设申请了开发人员账号.也就是交了那几百美金 ...
- iOS SDK具体解释之UIDevice(系统版本号,设备型号...)
原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK具体解释专栏 blog.csdn.net/column/details/huangwenchen ...
- MySQL 优化、设计规则浅谈
当数据量大,数据库相应慢时都会针对数据库进行优化.这时都是要针对具体情况,具体业务需求进行优化的. 但是有些步骤和规则应该适合各种情况的.这里综合网上找的资料简单分析一下. 第一优化你的sql和索引: ...