用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操作xml文件示例
Apr 07 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
Python内置函数—vars的具体使用方法
Dec 04 Python
python实现dijkstra最短路由算法
Jan 17 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
Aug 09 Python
Python Scrapy框架第一个入门程序示例
Feb 05 Python
PyCharm上安装Package的实现(以pandas为例)
Sep 18 Python
python中HTMLParser模块知识点总结
Jan 25 Python
python中opencv实现图片文本倾斜校正
Jun 11 Python
Python基础之条件语句详解
Jun 16 Python
浅析Python实现DFA算法
Jun 26 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 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的session过期设置
2013/06/29 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
jQuery常见开发技巧详细整理
2013/01/02 Javascript
javascript版2048小游戏
2015/03/18 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
JS采用绝对定位实现回到顶部效果完整实例
2016/06/20 Javascript
jQuery Tree Multiselect使用详解
2017/05/02 jQuery
Bootstrap布局之栅格系统学习笔记
2017/05/04 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
2017/07/20 jQuery
解决layui中table异步数据请求不支持自定义返回数据格式的问题
2018/08/19 Javascript
JavaScript设计模式之责任链模式实例分析
2019/01/16 Javascript
vue.js高德地图实现热点图代码实例
2019/04/18 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
回顾Javascript React基础
2019/06/15 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
Node.js API详解之 vm模块用法实例分析
2020/05/27 Javascript
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
python实现感知机线性分类模型示例代码
2019/06/02 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
详解python os.path.exists判断文件或文件夹是否存在
2020/11/16 Python
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
加拿大专业美发产品购物网站:Chatters
2021/02/28 全球购物
国际商务英语专业求职信
2014/07/08 职场文书
个人总结与自我评价
2014/09/18 职场文书
授权收款委托书
2014/09/23 职场文书
农村党员对照检查材料
2014/09/24 职场文书
万能检讨书2000字
2014/10/17 职场文书
师德承诺书
2015/01/20 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
本科毕业论文致谢词
2015/05/14 职场文书
小学信息技术教学反思
2016/02/16 职场文书