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++)相关推荐

  1. 科研日志——使用opencv提取视频中的人脸

    科研任务需要,将视频中与文字和音频对应的视频帧根据时间戳提取出来,并截取视频帧中的人脸.使用的工具是opencv,步骤如下: 1. 提取视频帧 Sentence标号的含义 数据集中对视频中的每个sen ...

  2. Python快速从视频中提取视频帧(多线程)

    Python快速提取视频帧(多线程) 今天介绍一种从视频中抽取视频帧的方法,由于单线程抽取视频帧速度较慢,因此这里我们增加了多线程的方法. 1.抽取视频帧 抽取视频帧主要使用了 Opencv 模块. ...

  3. qt6+opencv获取视频帧

    QT版本:QT 6.3 OpenCV版本:opencv 4.6 编译环境:MSVC 2019 64bit 主要功能:通过OpenCV实现提取视频的单个视频帧图像或者全部视频帧图像,还可以获取视频的宽度 ...

  4. python使用方法视频-python读取视频流提取视频帧的两种方法

    本文实例为大家分享了python读取视频流提取视频帧的具体代码,供大家参考,具体内容如下 方法一:通过imageio库和skimage库 1. 安装环境: pip install imageio pi ...

  5. 用python打开视频_python读取视频流提取视频帧的两种方法

    本文实例为大家分享了python读取视频流提取视频帧的具体代码,供大家参考,具体内容如下 方法一:通过imageio库和skimage库 1. 安装环境: pip install imageio pi ...

  6. python批量提取视频帧

    python批量提取视频帧 python批量提取视频帧,两种提取方式: 按帧数提取,每个视频提取固定帧数,若所取帧数超过视频总帧数,则截取视频所有帧 按时间间隔提取,每个time提取一帧 1. 使用示 ...

  7. ffmpeg:制作gif / 提取视频帧为图片

    1.制作Gif //将指定时间区间的视频转为gif ffmpeg -ss 起始时间 -t 持续时间 -i wangzai.mp4 wangzai.gif ffmpeg -ss 9 -t 5 -i wa ...

  8. python用OpenCV读取视频帧数、高度宽度等

    python用OpenCV读取视频帧数.高度宽度等 import cv2 import time# 2655 def get_each_frame(video_path):# 读取视频文件videoC ...

  9. python把视频取帧_用Python提取视频帧

    我想提取视频帧并保存为图像.import os, sys from PIL import Image a, b, c = os.popen3("ffmpeg -i test.avi" ...

最新文章

  1. linux虚拟网络设备之bridge(桥)(三)
  2. Octave matlab中运行.m文件方式对比
  3. 电脑其他设备android打问号,电脑设备管理器里的其它设备打问号,怎么解决啊?
  4. 8.22 13.1-13.3
  5. SVM学习(续)核函数 松弛变量和惩罚因子
  6. mysql使用某一列的内容赋值给另外一列,concat()函数
  7. React(二):类组件、函数式组件
  8. debian执行php网页,如何在Debian上安装和使用PHP Composer
  9. 树莓派4b怎么使用usb摄像头_【动手实践】树莓派通过EC20模组访问互联网 by xinlong...
  10. 高并发锁Lock的详细使用
  11. eclipse同步svn时如何过滤target等文件
  12. 软件唯有开源才是出路?
  13. 对象——从现实世界的抽象(*)
  14. AD属性对照表 LDAP
  15. 立方体和球形体积的计算
  16. 工作笔记——海康威视网络摄像头接入华为云VIS服务
  17. 中国石油大学(北京)本科毕业论文答辩PPT模板
  18. Vue - 前段框架
  19. unity四种Text总结
  20. windows ce 专题

热门文章

  1. “复合设备(Compound Device)”可以占用多个地址。所谓复合设备其实就是把多个功能设备 通过内置的USB HUB 组合而成的设备,比如带录音话筒的USB 摄像头
  2. 《Microsoft Visual Studio 6.0 Enterprise Edition》
  3. vue3.0引入百度地图并标记点
  4. win7用什么浏览器好
  5. linux驱动绑定设备 命令 bind,linux gadget 驱动
  6. 戴尔灵越3420拆机笔记
  7. __attribute__((weak))是什么意思
  8. ubuntu下使用LaTeX
  9. python发送文件传输助手,教你用Python通过微信来控制电脑摄像头
  10. 超分辨率重构六---DRN