用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实现暴力穷举博客园密码
Jun 19 Python
给你选择Python语言实现机器学习算法的三大理由
Nov 15 Python
Python遍历pandas数据方法总结
Feb 09 Python
Python实现判断给定列表是否有重复元素的方法
Apr 11 Python
python 日期操作类代码
May 05 Python
python采集微信公众号文章
Dec 20 Python
Python 3.6打包成EXE可执行程序的实现
Oct 18 Python
Python socket实现的文件下载器功能示例
Nov 15 Python
如何用Python 加密文件
Sep 10 Python
python正则表达式re.match()匹配多个字符方法的实现
Jan 27 Python
pytorch 两个GPU同时训练的解决方案
Jun 01 Python
Pygame Draw绘图函数的具体使用
Nov 17 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 set_time_limit(0)长连接的实现分析
2010/03/02 PHP
PHP自动重命名文件实现方法
2014/11/04 PHP
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
几行代码轻松搞定jquery实现flash8类似的连接效果
2007/05/03 Javascript
jQuery总体架构的理解分析
2011/03/07 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
webpack中引用jquery的简单实现
2016/06/08 Javascript
基于JavaScript实现轮播图代码
2016/07/14 Javascript
vue2.X组件学习心得(新手必看篇)
2017/07/05 Javascript
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
JS控制鼠标拒绝点击某一按钮的实例
2017/12/29 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
python使用KNN算法手写体识别
2018/02/01 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
浅谈Pandas:Series和DataFrame间的算术元素
2018/12/22 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
感知器基础原理及python实现过程详解
2019/09/30 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
美国最大的农村生活方式零售店:Tractor Supply Company(TSC)
2017/05/15 全球购物
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
办公室前台岗位职责范本
2013/12/10 职场文书
海南地接欢迎词
2014/01/14 职场文书
函授毕业自我鉴定
2014/02/04 职场文书
道德模范先进事迹
2014/02/14 职场文书
中级会计职业生涯规划书
2014/03/01 职场文书
青春无悔演讲稿
2014/05/08 职场文书
战马观后感
2015/06/08 职场文书
python 网络编程要点总结
2021/06/18 Python