前言

视频处理过程中,会用到对等长的视频进行处理,此时要对大视频进行分割。

实现步骤

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的更多相关文章

  1. iPhone批量删除照片/视频最好用的方法

    iPhone批量删除照片/视频最好用的方法 经过大量的搜索和不懈的尝试,今天终于找到了批量删除iPhone照片最好用的方法, 于是决定写一篇博客为更多的果粉们造福! 1. 通过USB将iPhone手机 ...

  2. python调用mediainfo工具批量提取视频信息

    写了2个脚本,分别是v1版本和v2版本 都是python调用mediainfo工具提取视频元数据信息 v1版本是使用pycharm中测试运行的,指定了视频路径 v2版本是最终交付给运营运行的,会把v2 ...

  3. IOS批量截取视频截图 UIImage mp4 IOS Video

    IOS批量截取视频截图 //生成截图 NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Documents&quo ...

  4. 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 ...

  5. Opencv如何捕获摄像头视频-OpenCV步步精深

    捕获摄像头实时图像 这一点非常非常重要,因为这一点关乎了以后我们进行各种各样的识别(人脸识别,车牌识别等等有趣的识别).opencv提供了一个接口,可以轻松的让我们实现这个功能.我们先来看一段代码,根 ...

  6. ffmpeg批量实现视频转码命令行

    ffmpeg实现视频转码命令行,result需要提前建好作为保存转码后的视频路径: ffmpeg -i .mp4 -vcodec h264 "result\1.mp4" 当有大量视 ...

  7. 基于标记的分水岭分割算法/OpenCV中距离变换

    Opencv分水岭算法——watershed自动图像分割用法 OpenCV距离变换distanceTransform应用 图像分割作为图像识别的基础,在图像处理中占有重要地位,通常需要在进行图像分割算 ...

  8. 22-1 web传输视频 Opencv+usb摄像头 树莓派+Flask实现视频流媒体WEB服务器

    第一篇 讲解原理 https://blog.miguelgrinberg.com/post/video-streaming-with-flask 第二篇 加入多线程可以直接用 https://gith ...

  9. go批量转换视频为音频

    package main import ( "bytes" "fmt" "io/ioutil" "log" " ...

随机推荐

  1. Selenium 定位页面元素 以及总结页面常见的元素 以及总结用户常见的操作

    1. Selenium常见的定位页面元素 2.页面常见的元素 3. 用户常见的操作 1. Selenium常见的定位页面元素 driver.findElement(By.id());driver.fi ...

  2. BeautifulSoup中的find,find_all

    1.一般来说,为了找到BeautifulSoup对象内任何第一个标签入口,使用find()方法. 以上代码是一个生态金字塔的简单展示,为了找到第一生产者,第一消费者或第二消费者,可以使用Beautif ...

  3. 3-23Agile Web Development,3-24(chapter: 6)

    第2章 Instant Gratification 复习 和 练习第一章,新建rails web页面. 重点: 知道了类,方法,实例变量 在rails是怎么用的. rails generate con ...

  4. Queue 实现生产者消费者模型

    Python中,队列是线程间最常用的交换数据的形式. Python Queue模块有三种队列及构造函数: 1.Python Queue模块的FIFO队列先进先出. class Queue.Queue( ...

  5. 使用CLOB抛出数字或值错误异常

    今天在调试某个问题的时候,由于使用了很多循环,我需要都打印出来,试图使用clob整体处理之后再打印. 最后抛出此异常:数字或值错误. 网友解释如下: $ oerr ora 650206502, 000 ...

  6. spring创建单例bean

    (使用的spring版本是3.2.10) 在xml文件中配置一个普通的bean,默认使用单例,创建该bean的调用栈如下: ClassPathXmlApplicationContext //Class ...

  7. SQL基础用法(实例一)

    /* 2006年10月01日 SQL Server 数据库的基本操作 (1) 数据库的创建 (2) 数据表的创建以及相关约束的指定(含临时表) (3) 数据的添/删/改 (4) 数据的查询 */ () ...

  8. HDU 2891

    DESCRIPTION: 大意是说 先给你n个 同学的 上课时间.一周的第几天,开始和结束的时间点.然后对应q个出去玩的时间.要你给出谁不能出去.如果都能出去就输出none. 开始做的时候觉得每个同学 ...

  9. hadoop mongodb install(3)

    reference:http://dblab.xmu.edu.cn/blog/868-2/ root@iZuf68496ttdogcxs22w6sZ:~# mv mongodb-linux-x86_6 ...

  10. bzoj1088 [SCOI2005]扫雷

    题解: 首先枚举第一个有木有雷 然后第二个可以通过第一个推,第三个也是 以此类推 最后判断是否合法 代码: #include<bits/stdc++.h> using namespace ...