opencv提取视频帧,将多张图片组合成视频(C++)
OpenCV-视频处理-视频处理5191 2
opencv提取视频帧,将多张图片组合成视频(C++)
作者:bit452
参考:http://blog.sina.com.cn/s/blog_5f5931540100rt4n.html
opencv结合c++实现了,提取视频的每一帧并保存。将多幅图片合成一个视频
第一个函数
void Video_To_Image(string filename)
作用是 生成并保存一个视频的每一帧
#include <iostream> #include <string> #include "opencv2/highgui/highgui.hpp" #include "opencv2/core/core.hpp"using namespace std; void Video_To_Image(string filename); void Image_To_Video(); int main() {string video_name = "test.avi";//注意,使用string时,若不用using namespace std,需要使用std::stringVideo_To_Image(video_name);Image_To_Video();return 0; } void Video_To_Image(string filename) {cout << "---------------Video_To_Image-----------------" << endl;cv::VideoCapture capture(filename);if (!capture.isOpened()){cout << "open video error";}/*CV_CAP_PROP_POS_MSEC – 视频的当前位置(毫秒)CV_CAP_PROP_POS_FRAMES – 视频的当前位置(帧)CV_CAP_PROP_FRAME_WIDTH – 视频流的宽度CV_CAP_PROP_FRAME_HEIGHT – 视频流的高度CV_CAP_PROP_FPS – 帧速率(帧 / 秒)*/int frame_width = (int)capture.get(CV_CAP_PROP_FRAME_WIDTH);int frame_height = (int)capture.get(CV_CAP_PROP_FRAME_HEIGHT);float frame_fps = capture.get(CV_CAP_PROP_FPS);int frame_number = capture.get(CV_CAP_PROP_FRAME_COUNT);//总帧数cout << "frame_width is " << frame_width<<endl;cout << "frame_height is " << frame_height << endl;cout << "frame_fps is " << frame_fps << endl;int num = 0;//统计帧数cv::Mat img;string img_name;char image_name[20];cv::namedWindow("MyVideo",CV_WINDOW_AUTOSIZE);while (true){cv::Mat frame;//从视频中读取一个帧bool bSuccess = capture.read(frame);if (!bSuccess){cout << "不能从视频文件读取帧" << endl;break;}//在MyVideo窗口上显示当前帧imshow("MyVideo", frame);//保存的图片名//sprintf(const_cast<char*>(img_name.data()), "%s%d%s", "image", ++num, ".jpg");//保存的图片名sprintf(image_name, "%s%d%s", "image", ++num, ".jpg");//保存的图片名img_name = image_name;imwrite(img_name, frame);//保存保存一帧图片if (cv::waitKey(30) == 27||num==frame_number){cout << "按下ESC键" << endl;break;}}capture.release();//这句话貌似不需要 }
void Image_To_Video();
作用是将多张图片合成视频
定义如下
void Image_To_Video() {cout << "---------------Video_To_Image-----------------" << endl;char image_name[20];string s_image_name;cv::VideoWriter writer;int isColor = 1;//不知道是干啥用的int frame_fps = 30;int frame_width = 640;int frame_height = 480;using namespace cv;string video_name = "out.avi";writer = VideoWriter(video_name, CV_FOURCC('X', 'V', 'I', 'D'),frame_fps,Size(frame_width,frame_height),isColor);cout << "frame_width is " << frame_width << endl;cout << "frame_height is " << frame_height << endl;cout << "frame_fps is " << frame_fps << endl;cv::namedWindow("image to video", CV_WINDOW_AUTOSIZE);int num = 160;//输入的图片总张数int i = 0;Mat img;while (i<=num){sprintf(image_name, "%s%d%s", "image", ++i, ".jpg");s_image_name = image_name;img = imread(s_image_name);//读入图片if (!img.data)//判断图片调入是否成功{cout << "Could not load image file...\n" << endl;}imshow("image to video",img);//写入writer.write(img);if (cv::waitKey(30) == 27 || i == 160){cout << "按下ESC键" << endl;break;} } }
opencv提取视频帧,将多张图片组合成视频(C++)相关推荐
- 科研日志——使用opencv提取视频中的人脸
科研任务需要,将视频中与文字和音频对应的视频帧根据时间戳提取出来,并截取视频帧中的人脸.使用的工具是opencv,步骤如下: 1. 提取视频帧 Sentence标号的含义 数据集中对视频中的每个sen ...
- Python快速从视频中提取视频帧(多线程)
Python快速提取视频帧(多线程) 今天介绍一种从视频中抽取视频帧的方法,由于单线程抽取视频帧速度较慢,因此这里我们增加了多线程的方法. 1.抽取视频帧 抽取视频帧主要使用了 Opencv 模块. ...
- qt6+opencv获取视频帧
QT版本:QT 6.3 OpenCV版本:opencv 4.6 编译环境:MSVC 2019 64bit 主要功能:通过OpenCV实现提取视频的单个视频帧图像或者全部视频帧图像,还可以获取视频的宽度 ...
- python使用方法视频-python读取视频流提取视频帧的两种方法
本文实例为大家分享了python读取视频流提取视频帧的具体代码,供大家参考,具体内容如下 方法一:通过imageio库和skimage库 1. 安装环境: pip install imageio pi ...
- 用python打开视频_python读取视频流提取视频帧的两种方法
本文实例为大家分享了python读取视频流提取视频帧的具体代码,供大家参考,具体内容如下 方法一:通过imageio库和skimage库 1. 安装环境: pip install imageio pi ...
- python批量提取视频帧
python批量提取视频帧 python批量提取视频帧,两种提取方式: 按帧数提取,每个视频提取固定帧数,若所取帧数超过视频总帧数,则截取视频所有帧 按时间间隔提取,每个time提取一帧 1. 使用示 ...
- ffmpeg:制作gif / 提取视频帧为图片
1.制作Gif //将指定时间区间的视频转为gif ffmpeg -ss 起始时间 -t 持续时间 -i wangzai.mp4 wangzai.gif ffmpeg -ss 9 -t 5 -i wa ...
- python用OpenCV读取视频帧数、高度宽度等
python用OpenCV读取视频帧数.高度宽度等 import cv2 import time# 2655 def get_each_frame(video_path):# 读取视频文件videoC ...
- python把视频取帧_用Python提取视频帧
我想提取视频帧并保存为图像.import os, sys from PIL import Image a, b, c = os.popen3("ffmpeg -i test.avi" ...
最新文章
- linux虚拟网络设备之bridge(桥)(三)
- Octave matlab中运行.m文件方式对比
- 电脑其他设备android打问号,电脑设备管理器里的其它设备打问号,怎么解决啊?
- 8.22 13.1-13.3
- SVM学习(续)核函数 松弛变量和惩罚因子
- mysql使用某一列的内容赋值给另外一列,concat()函数
- React(二):类组件、函数式组件
- debian执行php网页,如何在Debian上安装和使用PHP Composer
- 树莓派4b怎么使用usb摄像头_【动手实践】树莓派通过EC20模组访问互联网 by xinlong...
- 高并发锁Lock的详细使用
- eclipse同步svn时如何过滤target等文件
- 软件唯有开源才是出路?
- 对象——从现实世界的抽象(*)
- AD属性对照表 LDAP
- 立方体和球形体积的计算
- 工作笔记——海康威视网络摄像头接入华为云VIS服务
- 中国石油大学(北京)本科毕业论文答辩PPT模板
- Vue - 前段框架
- unity四种Text总结
- windows ce 专题
热门文章
- “复合设备(Compound Device)”可以占用多个地址。所谓复合设备其实就是把多个功能设备 通过内置的USB HUB 组合而成的设备,比如带录音话筒的USB 摄像头
- 《Microsoft Visual Studio 6.0 Enterprise Edition》
- vue3.0引入百度地图并标记点
- win7用什么浏览器好
- linux驱动绑定设备 命令 bind,linux gadget 驱动
- 戴尔灵越3420拆机笔记
- __attribute__((weak))是什么意思
- ubuntu下使用LaTeX
- python发送文件传输助手,教你用Python通过微信来控制电脑摄像头
- 超分辨率重构六---DRN