用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模拟鼠标拖动操作的方法
Mar 11 Python
tensorflow 获取变量&amp;打印权值的实例讲解
Jun 14 Python
Python IDLE清空窗口的实例
Jun 25 Python
详解pandas删除缺失数据(pd.dropna()方法)
Jun 25 Python
Python随机函数库random的使用方法详解
Aug 21 Python
Python Tensor FLow简单使用方法实例详解
Jan 14 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
Jun 06 Python
Python生成器传参数及返回值原理解析
Jul 22 Python
Python爬虫爬取微信朋友圈
Aug 06 Python
详解Python中list[::-1]的几种用法
Nov 16 Python
解决Pymongo insert时会自动添加_id的问题
Dec 05 Python
python实现简单文件读写函数
Feb 25 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
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
Codeigniter实现处理用户登录验证后的URL跳转
2014/06/12 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
php模拟登陆的实现方法分析
2015/01/09 PHP
php实现两个数组相加的方法
2015/02/17 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
php进程间通讯实例分析
2016/07/11 PHP
PHP中大括号'{}'用法实例总结
2017/02/08 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
Laravel框架在本地虚拟机快速安装的方法详解
2018/06/11 PHP
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
分享jQuery封装好的一些常用操作
2016/07/28 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
2018/02/05 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
2018/06/22 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
绘制微信小程序验证码功能的实例代码
2021/01/05 Javascript
Python脚本实现格式化css文件
2015/04/08 Python
python+selenium实现自动抢票功能实例代码
2018/11/23 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
TripAdvisor德国:全球领先的旅游网站
2017/12/07 全球购物
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
台湾旅游网站:灿星旅游
2018/10/11 全球购物
UNIX命令速查表
2012/03/10 面试题
教师评优的个人自我评价分享
2013/09/19 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
销售经理竞聘书
2014/03/31 职场文书
汽车质检员岗位职责
2015/04/08 职场文书
小平小道观后感
2015/06/09 职场文书
企业财务管理制度范本
2015/08/04 职场文书
高端收音机+蓝牙音箱,JBL TUNER FM带收音蓝牙音箱评测
2021/04/24 无线电