用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 随机数生成的代码的详细分析
May 15 Python
Python3.0与2.X版本的区别实例分析
Aug 25 Python
Python实现爬取逐浪小说的方法
Jul 07 Python
Windows下Anaconda的安装和简单使用方法
Jan 04 Python
Python3结合Dlib实现人脸识别和剪切
Jan 24 Python
Python常见字典内建函数用法示例
May 14 Python
python调用opencv实现猫脸检测功能
Jan 15 Python
python石头剪刀布小游戏(三局两胜制)
Jan 20 Python
python算法与数据结构之冒泡排序实例详解
Jun 22 Python
在Python中os.fork()产生子进程的例子
Aug 08 Python
Python实现验证码识别
Jun 15 Python
总结python多进程multiprocessing的相关知识
Jun 29 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生成EAN_13标准条形码实例
2013/11/13 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
2018/05/23 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
在 IE 中调用 javascript 打开 Excel 表
2006/12/21 Javascript
用Javscript实现表单复选框的全选功能
2007/05/25 Javascript
json 定义
2008/06/10 Javascript
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
javascript管中窥豹 形参与实参浅析
2011/12/17 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
js中各种类型的变量在if条件中是true还是false
2014/07/16 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
jquery validate demo 基础
2015/10/29 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
2016/11/18 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
React学习之事件绑定的几种方法对比
2017/09/24 Javascript
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
Python 装饰器使用详解
2017/07/29 Python
python生成n个元素的全组合方法
2018/11/13 Python
Python 使用type来定义类的实现
2019/11/19 Python
JupyterNotebook设置Python环境的方法步骤
2019/12/03 Python
win10从零安装配置pytorch全过程图文详解
2020/05/08 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
python爬取2021猫眼票房字体加密实例
2021/02/19 Python
Python实现我的世界小游戏源代码
2021/03/02 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
农救科工作职责
2013/11/27 职场文书
运动会运动员赞词
2015/07/22 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
节约用水广告语60条
2019/11/14 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书