用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 相关文章推荐
python3.0 字典key排序
Dec 24 Python
python机器学习案例教程——K最近邻算法的实现
Dec 28 Python
python opencv实现任意角度的透视变换实例代码
Jan 12 Python
Zookeeper接口kazoo实例解析
Jan 22 Python
python3的输入方式及多组输入方法
Oct 17 Python
Python中xml和json格式相互转换操作示例
Dec 05 Python
Python 抓取微信公众号账号信息的方法
Jun 14 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
Oct 10 Python
django多种支付、并发订单处理实例代码
Dec 13 Python
VScode连接远程服务器上的jupyter notebook的实现
Apr 23 Python
在pytorch中动态调整优化器的学习率方式
Jun 24 Python
Python+Xlwings 删除Excel的行和列
Dec 19 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实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
js innerHTML 的一些问题的解决方法
2008/06/22 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
2017/01/11 Javascript
使用 NodeJS+Express 开发服务端的简单介绍
2017/04/07 NodeJs
vue 请求后台数据的实例代码
2017/06/22 Javascript
Vue 页面跳转不用router-link的实现代码
2018/04/12 Javascript
js使用swiper实现层叠轮播效果实例代码
2018/12/12 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
[03:31]DOTA2英雄基础教程 大地之灵
2013/12/17 DOTA
Python中的默认参数详解
2015/06/24 Python
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
2015/11/05 Python
简单易懂的python环境安装教程
2017/07/13 Python
python中class的定义及使用教程
2019/09/18 Python
django ajax发送post请求的两种方法
2020/01/05 Python
Pytorch 中retain_graph的用法详解
2020/01/07 Python
python接口自动化框架实战
2020/12/23 Python
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
建筑设计所实习生自我鉴定
2013/09/25 职场文书
中英双版中文教师求职信
2013/10/27 职场文书
青春寄语大全
2014/04/09 职场文书
党员服务承诺书
2014/05/28 职场文书
爱护公物标语
2014/06/24 职场文书
学校学雷锋活动总结
2014/06/26 职场文书
白酒营销策划方案
2014/08/17 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
宪法宣传标语100条
2019/10/15 职场文书