用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进行TCP网络编程的教程
Apr 29 Python
Python实现约瑟夫环问题的方法
May 03 Python
django model去掉unique_together报错的解决方案
Oct 18 Python
Python守护进程和脚本单例运行详解
Jan 06 Python
python批量设置多个Excel文件页眉页脚的脚本
Mar 14 Python
python的debug实用工具 pdb详解
Jul 12 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
浅析Python 条件控制语句
Jul 15 Python
python实现人工蜂群算法
Sep 18 Python
Django生成数据库及添加用户报错解决方案
Oct 09 Python
Python insert() / append() 用法 Leetcode实战演示
Mar 31 Python
如何用python清洗文件中的数据
Jun 18 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下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
如何实现php图片等比例缩放
2015/07/28 PHP
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
使用js如何实现全选与全不选
2013/12/30 Javascript
JQuery中DOM事件合成用法实例分析
2015/06/13 Javascript
JS验证IP,子网掩码,网关和MAC的方法
2015/07/02 Javascript
Bootstrap实现响应式导航栏效果
2015/12/28 Javascript
js密码强度实时检测代码
2016/03/02 Javascript
原生js仿jquery实现对Ajax的封装
2016/10/04 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
node.js中实现kindEditor图片上传功能的方法教程
2017/04/26 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
2017/06/11 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
vue.js项目nginx部署教程
2018/04/05 Javascript
Vue 之孙组件向爷组件通信的实现
2019/04/23 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Python基于time模块求程序运行时间的方法
2017/09/18 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
django框架之cookie/session的使用示例(小结)
2018/10/15 Python
windows下python虚拟环境virtualenv安装和使用详解
2019/07/16 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
Fnac西班牙官网:法国文化和电子产品零售商
2021/03/14 全球购物
工地安全标语
2014/06/07 职场文书
泰山导游词
2015/02/02 职场文书
学雷锋活动简报
2015/07/20 职场文书
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
Java 将PPT幻灯片转为HTML文件的实现思路
2021/06/11 Java/Android
MySQL 开窗函数
2022/02/15 MySQL
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记