批量分割视频opencv
前言
视频处理过程中,会用到对等长的视频进行处理,此时要对大视频进行分割。
实现步骤
1.批量读取视频集;
2.视频分割;
测试代码
1.批量读取视频集;
/************************************************************************
* Copyright(c) 2017 AMY
* All rights reserved.
*
* File:
* Brief:
* Version: 1.0
* Author:
* Email:
* Date: 2017/10/30
* History:
* 20171030: ; ************************************************************************/
#include <iostream>
#include <string>
#include <vector>
#include "opencv2/opencv.hpp"
#include "opencv2/contrib/contrib.hpp" using namespace std;
using namespace cv; void videoSegmentation(string videoName, string videoSegFolder, int segLen, int k); int main()
{
string videoFolder = ".\\dataset\\p1";
string videoSegFolder = ".\\segVideos\\";
cv::Directory dir;
string videoType = "*.avi";
bool addPath = true;
int segLen = ;
vector<string> videosName = dir.GetListFiles(videoFolder, videoType, addPath);
string videoFile;
cout << videosName.size() << endl;
for (int i = ; i < videosName.size(); i++)
{
videoSegmentation(videosName[i], videoSegFolder, segLen, i+);
}
return ;
}
2.视频分割;
void videoSegmentation(string videoName, string videoSegFolder, int segLen, int k)
{
VideoCapture capture(videoName);
if (!capture.isOpened())
{
cout << "Loading error!" << endl;
abort();
}
int nFrame = (int)capture.get(CV_CAP_PROP_POS_FRAMES);
int fps = (int)capture.get(CV_CAP_PROP_FPS);
int width = (int)capture.get(CV_CAP_PROP_FRAME_WIDTH);
int height = (int)capture.get(CV_CAP_PROP_FRAME_HEIGHT);
Size videoSize(width, height);
VideoWriter writer;
string videoSeg = videoSegFolder + to_string(k) + "_1.avi";
writer.open(videoSeg, CV_FOURCC('D', 'I', 'V', ''), fps, videoSize);
Mat frame;
int videoNum = ;
while ()
{
if (capture.read(frame))
{
videoNum++;
writer << frame;
if (!(videoNum % (fps*segLen)))
{
videoSeg = videoSegFolder + to_string(k) + "_" + to_string(videoNum/(fps*segLen)) + ".avi";
writer.open(videoSeg, CV_FOURCC('D', 'I', 'V', ''), fps, videoSize);
}
else
{ }
}
else
{
break;
}
}
capture.release();
return; }
注意,OpenCV只支持avi的格式,而且生成的视频文件不能大于2GB,而且不能添加音频。
补充:
如果生成视频的颜色不正确,很有可能是中间处理过程中图片的R/G/B通道发生了改变,也有可能是编解码格式问题。
牢记:opencv的颜色通道顺序默认都是BGR!!!
完
批量分割视频opencv的更多相关文章
- iPhone批量删除照片/视频最好用的方法
iPhone批量删除照片/视频最好用的方法 经过大量的搜索和不懈的尝试,今天终于找到了批量删除iPhone照片最好用的方法, 于是决定写一篇博客为更多的果粉们造福! 1. 通过USB将iPhone手机 ...
- python调用mediainfo工具批量提取视频信息
写了2个脚本,分别是v1版本和v2版本 都是python调用mediainfo工具提取视频元数据信息 v1版本是使用pycharm中测试运行的,指定了视频路径 v2版本是最终交付给运营运行的,会把v2 ...
- IOS批量截取视频截图 UIImage mp4 IOS Video
IOS批量截取视频截图 //生成截图 NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Documents&quo ...
- ubuntu16.04安装配置mysql数据库,分割视频为帧图像
参考http://wiki.ubuntu.org.cn/MySQL%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97 版本为5.7 一.安装 安装命令sudo apt-get i ...
- Opencv如何捕获摄像头视频-OpenCV步步精深
捕获摄像头实时图像 这一点非常非常重要,因为这一点关乎了以后我们进行各种各样的识别(人脸识别,车牌识别等等有趣的识别).opencv提供了一个接口,可以轻松的让我们实现这个功能.我们先来看一段代码,根 ...
- ffmpeg批量实现视频转码命令行
ffmpeg实现视频转码命令行,result需要提前建好作为保存转码后的视频路径: ffmpeg -i .mp4 -vcodec h264 "result\1.mp4" 当有大量视 ...
- 基于标记的分水岭分割算法/OpenCV中距离变换
Opencv分水岭算法——watershed自动图像分割用法 OpenCV距离变换distanceTransform应用 图像分割作为图像识别的基础,在图像处理中占有重要地位,通常需要在进行图像分割算 ...
- 22-1 web传输视频 Opencv+usb摄像头 树莓派+Flask实现视频流媒体WEB服务器
第一篇 讲解原理 https://blog.miguelgrinberg.com/post/video-streaming-with-flask 第二篇 加入多线程可以直接用 https://gith ...
- go批量转换视频为音频
package main import ( "bytes" "fmt" "io/ioutil" "log" " ...
随机推荐
- 错误代码0x00000001,好多软件连不了网,求助~(WIN7/win8/win9/win10)
解决办法: 以管理员身份运行命令行,在弹出的窗口中运行如下命令: netsh winsock reset catalog netsh int ip reset reset.log hit 让被阻止了的 ...
- 认识网页:html + css + JavaScript
参考资料:爬虫课程 认识网页 使用chrome,右键检查,查看网页源码,左侧的html,右侧的css,底下的JavaScript. 网页 = HTML(内容) + CSS(样式) + JavaScri ...
- 1月24日 ruby基础3部分 Numeric, Array已学。
<div style="background:lightblue"> 第12章 数值类 12.1 数值的构成 Numeric-> Integer-> Fix ...
- 牛客网暑期ACM多校训练营(第三场)DEncrypted String Matching fft
题意:给你一个解密后的字符串,给你加密方式,加密过程可能出错,字符可能加减1,然后给你一个字符串,要求匹配个数(其实我也不太懂具体怎么加密解密,反正你把给你的前两个字符串用第三个加密一下,然后搞可以有 ...
- python-day28--logging模块
1.默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > E ...
- html5-磊哥
<!doctype html><html lang="en"> <head> <meta charset=" ...
- 使用GAN进行异常检测——可以进行网络流量的自学习哇,哥哥,人家是半监督,无监督的话,还是要VAE,SAE。
实验了效果,下面的还是图像的异常检测居多. https://github.com/LeeDoYup/AnoGAN https://github.com/tkwoo/anogan-keras 看了下,本 ...
- 简话Angular 08 Angular ajax
一句话: 它们Angular框架声明周期的各个阶段,常规约定各专注于特定功能,经过处理也可以互相替换 1.功能细分简解 $http 类似JQuery ajax,支持promise $http.json ...
- cnblogs插件jiathis
博客园cnblogs增加分享插件 <!--jiathis button Begin--> <div id="ckepop"> <span class= ...
- stimulsoft report工具—— 简单的多表连接打印报表例子
一.用报表工具打印多个表格信息(包括学生表.教师表.班级表) 1.准备打印的数据(用sqlserver) 1)班级表