前言

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

实现步骤

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. Android蓝牙通信功能开发

    1. 概述 Bluetooth 是几乎现在每部手机标准配备的功能,多用于耳机 mic 等设备与手机的连接,除此之外,还可以多部手机之间建立 bluetooth 通信,本文就通过 SDK 中带的一个聊天 ...

  2. Codeforces 294D - Shaass and Painter Robot

    294D - Shaass and Painter Robot 思路: 可以用数学归纳法证明一个结论:整个棋盘黑白相间当且仅当边缘黑白相间. 分奇偶讨论又可得出边缘黑色格个数为n+m-2 这样就可以暴 ...

  3. Appium 坑

    1. [Android]click没有反应 https://testerhome.com/topics/9610 在某些手机上有个安全选项,需要在开发者选项->安全设置(允许模拟点击),打开开关

  4. R—读取数据(导入csv,txt,excel文件)

    导入CSV.TXT文件 read.table函数:read.table函数以数据框的格式读入数据,所以适合读取混合模式的数据,但是要求每列的数据数据类型相同. read.table读取数据非常方便,通 ...

  5. python下编译py成pyc和pyo和pyd

    https://www.cnblogs.com/dkblog/archive/2009/04/16/1980757.html

  6. 12月21日 简单理解Active Recore Callback, destroy_all和delete_all的区别。豆知识(alias),语言学习法(4核心)

    destroy_all and delete_all Destroy the records by instantiating each record and calling its #destroy ...

  7. mate桌面xrdp无法登陆问题

    vi /usr/libexec/xrdp/startwm.sh 或者/etc/xrdp/startwm.sh: 找到相应的发行版本,增加mate-session如下所示: # el  if [ -r ...

  8. Confluence 6 为空间赋予公共访问

    希望为一个 Confluence 空间赋予公共访问权限,你必须为匿名用户赋予下面的权限: 在全站启用 可以使用(can use)权限,如上面描述的的. 相关的 空间权限.如果你希望你的一个空间可以公共 ...

  9. Johnny Solving CodeForces - 1103C (构造,图论)

    大意: 无向图, 无重边自环, 每个点度数>=3, 要求完成下面任意一个任务 找一条结点数不少于n/k的简单路径 找k个简单环, 每个环结点数小于n/k, 且不为3的倍数, 且每个环有一个特殊点 ...

  10. Enduring Exodus CodeForces - 655C (二分)

    链接 大意: n个房间, 1为占用, 0为未占用, John要将k头奶牛和自己分进k+1个空房间, 求John距最远的奶牛距离的最小值 这种简单题卡了20min.... 显然对于固定的k+1个房间, ...