用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 Matplotlib库入门指南
May 18 Python
Python+django实现简单的文件上传
Aug 17 Python
Python的mysql数据库的更新如何实现
Jul 31 Python
python使用sqlite3时游标使用方法
Mar 13 Python
对Python 网络设备巡检脚本的实例讲解
Apr 22 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
May 04 Python
python实现自主查询实时天气
Jun 22 Python
Python3 关于pycharm自动导入包快捷设置的方法
Jan 16 Python
Pycharm 设置默认头的图文教程
Jan 17 Python
python爬虫项目设置一个中断重连的程序的实现
Jul 26 Python
Python中变量的输入输出实例代码详解
Jul 28 Python
python爬虫学习笔记之pyquery模块基本用法详解
Apr 09 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
虫族 Zerg 魔法科技
2020/03/14 星际争霸
利用“多说”制作留言板、评论系统
2015/07/14 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
PHP与以太坊交互详解
2018/08/24 PHP
解决laravel 表单提交-POST 异常的问题
2019/10/15 PHP
用js实现trim()的解决办法
2013/04/16 Javascript
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
vue webuploader 文件上传组件开发
2017/09/23 Javascript
node.js中fs文件系统目录操作与文件信息操作
2018/02/24 Javascript
webpack公共组件引用路径简化小技巧
2018/06/15 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
细述Javascript的加法运算符的具体使用
2019/10/18 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
2019/11/23 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
Python实现的字典值比较功能示例
2018/01/08 Python
python实现员工管理系统
2018/01/11 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
python 多维切片之冒号和三个点的用法介绍
2018/04/19 Python
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
python爬取淘宝商品销量信息
2018/11/16 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
基于python实现计算且附带进度条代码实例
2020/03/31 Python
html5如何及时更新缓存文件(js、css或图片)
2013/06/24 HTML / CSS
医学类导师推荐信范文
2013/11/19 职场文书
水务局局长岗位职责
2013/11/28 职场文书
无工作经验者个人求职信范文
2013/12/22 职场文书
商场拾金不昧表扬信
2014/01/13 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
2014年宣传工作总结
2014/11/18 职场文书
2019年最新七夕唯美祝福语(60条)
2019/07/22 职场文书