代码如下:

// 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 将视频分解成图片和使用本地图片合成视频的更多相关文章

  1. 图片上传-本地图片转base64+ie8支持+本地预览支持

    最近项目由于flash同学没在了,图片上传只能前端重新做,后台希望用base64数据上传,复用之前接口 问题来了, 1.ie8 不支持canvas转base64 2.本地预览 base64数据,ie8 ...

  2. opencv学习之路(3)、批量读取图片、视频分解、视频合成

    一.批量有序读取图片 #include<opencv2/opencv.hpp> using namespace cv; void main() { //批量读取图片(有序) ]; ]; M ...

  3. 本地与在线图片转Base64及图片预览

    查看效果:http://sandbox.runjs.cn/show/tgvbo9nq 本地图片转Base64(从而可以预览图片): function localImgLoad() { var src ...

  4. iOS 根据图片URL从本地相册获取图片

    最近做一个聊天的项目,需要发送图片后读取本地图片显示到列表里.刚开始的时候,天真的认为可以用SDWebImage直接加载,然后并不能行. 于是在网上搜了搜,如何根据从相册获取的UIImagePicke ...

  5. Atitit. html 使用js显示本地图片的设计方案.doc

    Atitit. html 使用js显示本地图片的设计方案.doc 1.  Local mode  是可以的..web模式走有的不能兰.1 2. IE8.0 显示本地图片 img.src=本地图片路径无 ...

  6. Atitit. IE8.0 显示本地图片预览解决方案 img.src=本地图片路径无效的解决方案

    Atitit. IE8.0 显示本地图片预览解决方案 img.src=本地图片路径无效的解决方案 1. IE8.0 显示本地图片 img.src=本地图片路径无效的解决方案1 1.1. div来完成  ...

  7. Android 实例解说加入本地图片和调用系统拍照图片

    在项目的开发过程我们离不开图片.而有时候须要调用本地的图片,有时候须要调用拍照图片.同一时候实现拍照的方法有两种,一种是调用系统拍照功能.还有一种是自己定义拍照功能. 而本博文眼下仅仅解说第一种方法, ...

  8. opencv 读取视频内容写入图片帧

    现在主要把自己平时用到的opencv功能记录到博客,一方面方便自己有时间来回顾,另一方便提供给大家一个参考. opencv 读取视频内容,把视频帧每一帧写成图片,存入电脑中.这个步骤是许多数据处理的基 ...

  9. IOS 视频分解图片、图片合成视频

    在IOS视频处理中,视频分解图片和图片合成视频是IOS视频处理中经常遇到的问题,这篇博客就这两个部分对IOS视频图像的相互转换做一下分析. (1)视频分解图片 这里视频分解图片使用的是AVAssetI ...

随机推荐

  1. update-alternatives命令详解

    转载:http://blog.csdn.net/maixia24/article/details/11707289 update-alternatives是ubuntu系统中专门维护系统命令链接符的工 ...

  2. Java Thread系列(四)线程通信

    Java Thread系列(四)线程通信 一.传统通信 public static void main(String[] args) { //volatile实现两个线程间数据可见性 private ...

  3. 访问localhost文件下的testmysql.php文件报Not Found

    但是访问localhost:8081/index.php没有报该错误,页面显示success,并没有显示wamp的主页 出错原因:Apache和php没关联好,修改一下Apache的httpd.con ...

  4. Jenkins执行selenium报错unknown error: cannot find Chrome binary

    问题描述:在Pycharm中执行selenium测试用例,可以正常运行, 集成在Jenkins中,构建时,发现构建成功,但是查看Console Output,报错:unknown error: can ...

  5. docker 关于volumns的总结(转)

    原文地址:http://www.cnblogs.com/ivictor/p/4834864.html Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定. 譬如我要启动一个ce ...

  6. Linux设备驱动模型底层架构及组织方式

    1.什么是设备驱动模型? 设备驱动模型,说实话这个概念真的不好解释,他是一个比较抽象的概念,我在网上也是没有找到关于设备驱动模型的一个定义,那么今天就我所学.所了解 到的,我对设备驱动模型的一个理解: ...

  7. RocketMQ服务器监控误区

    请不要监控10912端口 case: result: 监控10912端口会导致HAService异常,新起线程,吃掉内存,无限次监控虚拟机将宕机! 时间上是直接因果关系. 监控10911 和 9876 ...

  8. handsontable-常用配置

    冻结单元格 var //自动创建数据 myData = Handsontable.helper.createSpreadsheetData(100, 50), container = document ...

  9. [label][翻译][JavaScript-Translation]七个步骤让你写出更好的JavaScript代码

    7 steps to better JavaScript 原文链接: http://www.creativebloq.com/netmag/7-steps-better-javascript-5141 ...

  10. access建立sql查询语句运行查询语句

    1.打开一个Access数据库文件 2.点击“创建”标签中的“查询设计”,会弹出一个“显示表”的对话框,点击“关闭”将其关闭 3.这时会有一个名为“查询*”的窗口,还不能输入SQL语句 4.点击左上角 ...