opencv 将视频分解成图片和使用本地图片合成视频
代码如下:
// cvTest.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
char outname[200];
typedef struct __SaveProp__
{
int width;
int height;
int framerate;
struct __SaveProp__(int W, int H, int F)
{
width = W;
height = H;
framerate = F;
}
}SaveProp;
void Video2Img(char* filename, char* outpath, int index, char* postfix);
void Img2Video(char* filepath, unsigned int startIndex, unsigned int EndIndex, char* fOutname, SaveProp* p_prop);
int _tmain(int argc, _TCHAR* argv[])
{
//Video2Img("E:\\3.avi", "E:\\data", 500, "bmp");
SaveProp saveprop(640, 482,15);
Img2Video("E:\\data", 1, 481, "E:\\test", &saveprop);
return 0;
}
//视频拆分成图片
void Video2Img(char* filename, char* outpath, int index, char* postfix)
{
VideoCapture cap(filename);
if (!cap.isOpened())
{
cout << "============================= Video Open Error ============================= " << endl;
return;
}
Mat frame;
int totalname = cap.get(CV_CAP_PROP_FRAME_COUNT);
for (int i = 1; i <= totalname; i++)
{
cap >> frame;
if (frame.empty())
break;
cout << "============================= write " << i << " frame =============================" << endl;
sprintf(outname, "%s\\%04d.%s", outpath, index, postfix);
index++;
imshow("video", frame);
waitKey(10);
imwrite(outname, frame);
}
cap.release();
destroyAllWindows();
cout << "============================= Finish Converting =============================" << endl;
}
// 编码方法
/*
CV_FOURCC('P','I','M','1') = MPEG-1 codec
CV_FOURCC('M','J','P','G') = motion-jpeg codec
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') = H263 codec
CV_FOURCC('I', '2', '6', '3') = H263I codec
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
*/
// 图片合成视频
void Img2Video(char* filepath, unsigned int startIndex, unsigned int EndIndex, char* fOutname, SaveProp* p_prop)
{
sprintf(outname, "%s.avi", fOutname);
VideoWriter writer(outname, VideoWriter::fourcc('M', 'P', '4', '2'), p_prop->framerate,
Size(p_prop->width, p_prop->height));
Mat frame;
char filename[200];
for (unsigned int i = startIndex; i <= EndIndex; i++)
{
sprintf(filename, "%s\\%04d.bmp", filepath, i);
frame = imread(filename);
if (!frame.empty())
{
writer.write(frame);
cout << "============================= write " << i <<" frame =============================" << endl;
}
else
cout << "============================= Image Open Error ============================= " << endl;
}
cout << "============================= Finish Converting =============================" << endl;
}
opencv 将视频分解成图片和使用本地图片合成视频的更多相关文章
- 图片上传-本地图片转base64+ie8支持+本地预览支持
最近项目由于flash同学没在了,图片上传只能前端重新做,后台希望用base64数据上传,复用之前接口 问题来了, 1.ie8 不支持canvas转base64 2.本地预览 base64数据,ie8 ...
- opencv学习之路(3)、批量读取图片、视频分解、视频合成
一.批量有序读取图片 #include<opencv2/opencv.hpp> using namespace cv; void main() { //批量读取图片(有序) ]; ]; M ...
- 本地与在线图片转Base64及图片预览
查看效果:http://sandbox.runjs.cn/show/tgvbo9nq 本地图片转Base64(从而可以预览图片): function localImgLoad() { var src ...
- iOS 根据图片URL从本地相册获取图片
最近做一个聊天的项目,需要发送图片后读取本地图片显示到列表里.刚开始的时候,天真的认为可以用SDWebImage直接加载,然后并不能行. 于是在网上搜了搜,如何根据从相册获取的UIImagePicke ...
- Atitit. html 使用js显示本地图片的设计方案.doc
Atitit. html 使用js显示本地图片的设计方案.doc 1. Local mode 是可以的..web模式走有的不能兰.1 2. IE8.0 显示本地图片 img.src=本地图片路径无 ...
- Atitit. IE8.0 显示本地图片预览解决方案 img.src=本地图片路径无效的解决方案
Atitit. IE8.0 显示本地图片预览解决方案 img.src=本地图片路径无效的解决方案 1. IE8.0 显示本地图片 img.src=本地图片路径无效的解决方案1 1.1. div来完成 ...
- Android 实例解说加入本地图片和调用系统拍照图片
在项目的开发过程我们离不开图片.而有时候须要调用本地的图片,有时候须要调用拍照图片.同一时候实现拍照的方法有两种,一种是调用系统拍照功能.还有一种是自己定义拍照功能. 而本博文眼下仅仅解说第一种方法, ...
- opencv 读取视频内容写入图片帧
现在主要把自己平时用到的opencv功能记录到博客,一方面方便自己有时间来回顾,另一方便提供给大家一个参考. opencv 读取视频内容,把视频帧每一帧写成图片,存入电脑中.这个步骤是许多数据处理的基 ...
- IOS 视频分解图片、图片合成视频
在IOS视频处理中,视频分解图片和图片合成视频是IOS视频处理中经常遇到的问题,这篇博客就这两个部分对IOS视频图像的相互转换做一下分析. (1)视频分解图片 这里视频分解图片使用的是AVAssetI ...
随机推荐
- python 中numpy的var,std及cov
var:表示方差, 即各项-均值的平方求和后再除以N , std:表示标准差,是var的平方根. cov:协方差 ,与var类似,但是除以(N-1)
- (字典树)Revenge of Fibonacci -- HDU -- 4099
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4099 要用c++交哦, G++ MLE 不是很懂,先粘上慢慢学习 代码: #include<std ...
- hdu5340—Three Palindromes—(Manacher算法)——回文子串
Three Palindromes Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- Spring全局异常处理
最近学习Spring时,认识到Spring异常处理的强大.之前处理工程异常,代码中最常见的就是try-catch-finally,有时一个try,多个catch,覆盖了核心业务逻辑: 1 try{ 2 ...
- 6、Docker Image
6.1 什么是image 文件和meta data的集合(root filesystem) 分层的,并且每一层都可以添加.改变.删除文件,成为一个新的image 不同的image可以共享相同的laye ...
- TOAD连接ORACLE而不装ORACLE 客户端的方法
TOAD连接ORACLE而不装ORACLE 客户端的方法 原来连接ORACLE总是要装ORACLE客户端,挺麻烦得,一方面要带ORACLE得盘,另一方面,装这么大得东西也让人很不爽. ORACLE好像 ...
- task4:结对项目-词频统计
结对人:周楠 思路:利用TreeMap实现key字典序,然后输出到LinkedList,然后用Comparator,实现字典值从大到小排序,但是key实现值相同的key字典序的想出的实现方法,但是一直 ...
- Xshell传输文件
用rz,sz命令在xshell传输文件 很好用,然后有时候想在windows和linux上传或下载某个文件,其实有个很简单的方法就是rz,sz 首先你的Ubuntu需要安装rz.sz(如果没有安装请执 ...
- 创建TFS团队项目时自动建立代码库的文件夹结构
很多客户都跟我提过一个这样的需求,即需要在创建团队TFS项目时,自动创建起源代码库的文档结构,例如类似下列结构的文件夹: <teamProject> |- DEVELOPMENT ...
- .Net面试经验,从北京到杭州
首先简单说下,本人小本,目前大四软件工程专业,大三阴差阳错地选了.Net方向,也是从大三开始接触.Net.自认为在学生中.net基础还可以,嘿嘿,吹一下. 大四第一学期学校安排去北京培训,培训了两个月 ...