用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调用短信猫控件实现发短信功能实例
Jul 04 Python
python搭建虚拟环境的步骤详解
Sep 27 Python
Python中顺序表的实现简单代码分享
Jan 09 Python
Python编程argparse入门浅析
Feb 07 Python
selenium+python实现自动化登录的方法
Sep 04 Python
浅谈python中get pass用法
Mar 19 Python
python中的Elasticsearch操作汇总
Oct 30 Python
python 实现查询Neo4j多节点的多层关系
Dec 23 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 Python
Python函数参数分类原理详解
May 28 Python
解决python对齐错误的方法
Jul 16 Python
Python 第三方库 openpyxl 的安装过程
Dec 24 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
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
2014/06/25 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
Array.prototype.slice 使用扩展
2010/06/09 Javascript
jQuery与其它库冲突的解决方法
2010/06/25 Javascript
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
一个网页标题title的闪动提示效果实现思路
2014/03/22 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
JS判断form内所有表单是否为空的简单实例
2016/09/09 Javascript
Bootstrap3 Grid system原理及应用详解
2016/09/30 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
2020/03/04 Javascript
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
Python内建数据结构详解
2016/02/03 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
Django开发的简易留言板案例详解
2018/12/04 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
工作会议欢迎词
2014/01/16 职场文书
消防安全检查制度
2014/02/04 职场文书
幼儿园秋游感想
2014/03/12 职场文书
教育英语专业毕业生的求职信
2014/03/13 职场文书
广告词串烧
2014/03/19 职场文书
服务行业演讲稿
2014/09/02 职场文书
二人合伙经营协议书
2014/09/13 职场文书
领导走群众路线整改措施思想汇报
2014/10/12 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL
《火纹风花雪月无双》预告“神秘雇佣兵” 紫发剑客
2022/04/13 其他游戏