用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备份文件以及mysql数据库的脚本代码
Jun 10 Python
Centos5.x下升级python到python2.7版本教程
Feb 14 Python
Python文件读取的3种方法及路径转义
Jun 21 Python
python游戏地图最短路径求解
Jan 16 Python
django解决跨域请求的问题详解
Jan 20 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
Jan 29 Python
python tkinter canvas 显示图片的示例
Jun 13 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
Mar 11 Python
Python基于httpx模块实现发送请求
Jul 07 Python
python合并多个excel文件的示例
Sep 23 Python
神经网络训练采用gpu设置的方式
Mar 03 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获取文本框、密码域、按钮的值实例代码
2017/04/19 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
php伪静态验证码不显示的解决方案
2019/09/26 PHP
JavaScript中常见陷阱小结
2010/04/27 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
2014/08/27 Javascript
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
JavaScript的事件代理和委托实例分析
2015/03/25 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
vuex实现简易计数器
2016/10/27 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
echarts设置图例颜色和地图底色的方法实例
2018/08/01 Javascript
puppeteer实现html截图的示例代码
2019/01/10 Javascript
详解vue 命名视图
2019/08/14 Javascript
详解Typescript 内置的模块导入兼容方式
2020/05/31 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
2020/11/06 Javascript
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python将图片文件转换成base64编码的方法
2015/03/14 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
Python数据分析库pandas基本操作方法
2018/04/08 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
Matplotlib animation模块实现动态图
2021/02/25 Python
css3弹性盒模型(Flexbox)详细介绍
2014/10/08 HTML / CSS
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
aden + anais英国官网:美国婴儿贴身用品品牌
2019/09/08 全球购物
工商管理本科毕业生求职信范文
2013/10/05 职场文书
应届生会计求职信
2013/11/11 职场文书
关于热爱祖国的演讲稿
2014/05/04 职场文书
宾馆仓管员岗位职责
2014/07/27 职场文书
授权委托书公证
2014/09/14 职场文书
市场营销工作计划书
2014/09/15 职场文书
党员学习群众路线心得体会
2014/11/04 职场文书
Java 将PPT幻灯片转为HTML文件的实现思路
2021/06/11 Java/Android
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android
使用CSS实现音波加载效果
2023/05/07 HTML / CSS