用OpenCV将视频分解成单帧图片,图片合成视频示例


Posted in Python onDecember 10, 2019

本文做的是基于opencv将视频帧转成图片输出,由于一个视频包含的帧数过多,经常我们并不是需要它的全部帧转成图片,因此我们希望可以设置每隔多少帧再转一次图片(本文设置为30帧),若有人需求是只需要前多少帧,也可以类似的改写下代码即可。

程序一:

#include <iostream>
#include "cv.h"
#include "opencv2/opencv.hpp"
 
using namespace std;
using namespace cv;
 
// 描述:将视频帧转成图片输出
void main()
{
	// 获取视频文件
	VideoCapture cap("J:\\CQH\\DLFR\\lab_face\\video\\DSC_0023.MOV");
 
	// 获取视频总帧数
	long totalFrameNumber = cap.get(CV_CAP_PROP_FRAME_COUNT);
	cout << "total frames: " << totalFrameNumber << endl;
 
	Mat frame;
	bool flags = true;
	long currentFrame = 0;
 
	while (flags){
		// 读取视频每一帧
		cap.read(frame);
 
		stringstream str;
		str << "cqh" << currentFrame << ".jpg";
		cout << "正在处理第" << currentFrame << "帧" << endl;
		printf("\n");
 
		// 设置每30帧获取一次帧
		if (currentFrame % 30 == 0){
			// 将帧转成图片输出
			imwrite("J:\\CQH\\DLFR\\lab_face\\videoToImages\\DSC_0023\\" + str.str(), frame);
		}
		// 结束条件
		if (currentFrame >= totalFrameNumber){
			flags = false;
		}
		currentFrame++;
	}
	
	system("pause");
}

程序2(批量有序读取图片)

#include<opencv2/opencv.hpp>
 
using namespace cv;
 
void main()
{
  //批量读取图片(有序)
  char filename[50];
  char winName[50];
  Mat srcImg;
  for (int i = 1; i < 100; i++)
  {
    sprintf(filename,"%d.bmp",i);
    sprintf(winName,"NO--%d",i);
    srcImg=imread(filename);
    if (srcImg.empty())
      break;
    imshow(winName,srcImg);
  }
  waitKey(0);
  destroyAllWindows();
}

二、视频分解成图片

需要提前在E盘创建pic文件夹,图片命名由1,2....这样的编号排好

#include<opencv2/opencv.hpp>
 
using namespace cv;
 
void main()
{
  Mat frame;
  char outfile[50];
  VideoCapture cap("E:\\2.avi");
  if (!cap.isOpened())//打开失败
    return;
  int totalFrame=cap.get(CV_CAP_PROP_FRAME_COUNT);//获取视频总帧数
  for (int i = 1; i <=totalFrame; i++)
  {
    cap>>frame;
    if (frame.empty())
      break;
    sprintf(outfile,"E:\\pic\\%d.bmp",i);
    imwrite(outfile,frame);
    imshow("video",frame);
    waitKey(15);
  }
  cap.release();
  destroyAllWindows();
}

三、图片合成视频

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
 
void main()
{
  VideoWriter writer("E:\\out.avi",CV_FOURCC('X','V','I','D'),20,Size(320,240),true);//Size要和图片尺寸保持一致
  char filename[50];
  Mat frame;
  for (int i = 1; i < 644; i++)
  {
    sprintf(filename,"E:\\pic\\%d.bmp",i);
    frame=imread(filename);
    if(frame.empty())  break;
    writer<<frame;
  }
  cout<<"write end!"<<endl;
  destroyAllWindows();
}

结果在E盘根目录生成一个out.avi的视频文件,这个目录可以自己改,图片源路径也可以自己改

以上这篇用OpenCV将视频分解成单帧图片,图片合成视频示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中使用sys模板和logging模块获取行号和函数名的方法
Apr 15 Python
跟老齐学Python之Import 模块
Oct 13 Python
Python多线程编程(一):threading模块综述
Apr 05 Python
python使用wmi模块获取windows下硬盘信息的方法
May 15 Python
一文总结学习Python的14张思维导图
Oct 17 Python
pandas 获取季度,月度,年度首尾日期的方法
Apr 11 Python
pyshp创建shp点文件的方法
Dec 31 Python
python设计tcp数据包协议类的例子
Jul 23 Python
详解Python中正则匹配TAB及空格的小技巧
Jul 26 Python
python修改字典键(key)的方法
Aug 05 Python
python文件绝对路径写法介绍(windows)
Dec 25 Python
利用setuptools打包python程序的方法步骤
Jan 18 Python
python3 webp转gif格式的实现示例
Dec 10 #Python
Spring Cloud Feign高级应用实例详解
Dec 10 #Python
flask 使用 flask_apscheduler 做定时循环任务的实现
Dec 10 #Python
使用opencv将视频帧转成图片输出
Dec 10 #Python
django框架cookie和session用法实例详解
Dec 10 #Python
python selenium实现发送带附件的邮件代码实例
Dec 10 #Python
opencv设置采集视频分辨率方式
Dec 10 #Python
You might like
php中创建和调用webservice接口示例
2014/07/25 PHP
Laravel中间件实现原理详解
2016/10/09 PHP
php批量修改表结构实例
2017/05/24 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
js鼠标左右键 键盘值小结
2010/06/11 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
jQuery常用且重要方法汇总
2015/07/13 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
深入理解$.each和$(selector).each
2016/05/15 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
2018/01/12 Javascript
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
vue自定义指令用法经典实例小结
2019/03/16 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
2019/12/09 Javascript
vue添加自定义右键菜单的完整实例
2020/12/08 Vue.js
[01:07]2015国际邀请赛 中国区预选赛精彩回顾
2015/06/15 DOTA
学生信息管理系统Python面向对象版
2019/01/30 Python
python开发一款翻译工具
2020/10/10 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
美国家具网站:Cymax
2016/09/17 全球购物
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
高三毕业寄语
2014/04/10 职场文书
学生打架检讨书
2014/10/20 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
2015年政协委员工作总结
2015/05/20 职场文书
画展观后感
2015/06/17 职场文书
行政复议决定书
2015/06/24 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
如何在向量化NumPy数组上进行移动窗口
2021/05/18 Python