批量解帧视频文件cpp
前言
将多个视频文件进行解帧。
实现过程
1.批量获取文件路径;
2.对某个视频文件进行解帧;
代码
/************************************************************************
* Copyright(c) 2017 ZRJ
* All rights reserved.
*
* File: video2frames.cpp
* Brief: 批量解帧视频文件
* Version: 1.0
* Author: ZRJ
* Email: happyamyhope@163.com
* Date: 2017/05/10
* History:
* 20170510: 批量解帧视频文件; ************************************************************************/
//-------------------------------------------------------------------------
//头文件
#include<highgui.h>
#include<cv.h>
#include<io.h>
#include<iostream>
#include<fstream>
#include <direct.h>//mkdir
using namespace std;
using namespace cv;
//调参
string filePath = "E:\\carriage_recognition\\video\\2017-05-02";
char picfilename[];
char save_path[];
//函数声明
void getFiles(string path, vector<string>& files)
{
//文件句柄
long hFile = ;
//文件信息
struct _finddata_t fileinfo;
string p;
if ((hFile = (long)_findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -)
{
do
{
//如果是目录,迭代之
//如果不是,加入列表
if ((fileinfo.attrib & _A_SUBDIR))
{
if (strcmp(fileinfo.name, ".") != && strcmp(fileinfo.name, "..") != )
getFiles(p.assign(path).append("\\").append(fileinfo.name), files);
}
else
{
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
}
} while (_findnext(hFile, &fileinfo) == );
_findclose(hFile);
}
}
void mpf2frame(const char* videoPath, char* picfilename)
{
CvCapture* capture = cvCaptureFromFile(videoPath);
int fps = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
long nFrame = (long)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT); // 获取总帧数
int width = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
int height = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);
IplImage* image = NULL;
int i = ; if (capture)
{
while ()
{
image = cvQueryFrame(capture);
if (image)
{
i++;
if (i % == && i <= nFrame )
{
sprintf(save_path, "%s\\%d.jpg", picfilename, i);
cvSaveImage(save_path, image);
}
else if (i < nFrame)
{ }
else if (i >= nFrame)
{
return;
}
}
}
} }
int main()
{ ofstream fout("video_list.txt");
vector<string> files;
//获取该路径下的所有文件
getFiles(filePath, files);
int size = (int)files.size();
for (int i = ; i < size; i++)
{
fout << files[i].c_str() << endl;
cout << i << endl;
const char* filename = files[i].c_str();
sprintf(picfilename, "%s\\frame", filePath.c_str());
_mkdir(picfilename);
sprintf(picfilename, "%s\\%d", picfilename, i);
_mkdir(picfilename);
mpf2frame(filename, picfilename); }
fout.close();
return ; }
代码说明:
1.每个视频文件的解帧文件夹在视频文件路径下,按序排列;
2.字符串的操作不熟练;
3.批量获取文件参考博客:http://blog.csdn.net/xuejiren/article/details/37040827#
完
批量解帧视频文件cpp的更多相关文章
- 批量下载ts视频文件
第一步 使用chrome 按F12进入开发模式,拖动视频进度条到视频结束: 然后找到.m3u8以结尾的文件并保存为文本文件. 第二步 点开查看里面是否存在如下以ts结尾的文件内容 ...... /20 ...
- OpenCV 学习笔记(15)openc解帧视频
1 修改读取视频的地址 2 修改保存图片序列的路径 String videopath = "F:/dongdong/0tool/3D/2模型/相机阵列/1_12cam亿级相机/数据/giga ...
- 开源一个自动整理B站UWP客户端软件进行批量下载的视频文件的小工具BiliVideosReoganizeHelper
大家都知道B站是一个很受欢迎的视频学习网站,上面有很多无私的up主上传了大量优秀的教学视频,在此向B站致敬,向广大UP主致敬. 有时,我们需要下载收藏一些视频,以防止以后找不到了.那么我们可以用B ...
- Linux批量“解压”JAR文件
当你需要”解压“很多jar文件时,可以通过很多方式进行,比如下面这种 1,列出每一个jar文件名,逐个展开 for i in $(ls *sour*.jar);do jar xvf $i;done
- 批量解压Zip文件
实现效果: 实现代码:
- java批量解压文件夹下的所有压缩文件(.rar、.zip、.gz、.tar.gz)
// java批量解压文件夹下的所有压缩文件(.rar..zip..gz..tar.gz) 新建工具类: package com.mobile.utils; import com.github.jun ...
- tar、tgz、gz文件批量解压方法
我是用for i in $(ls *.tgz);do tar xvf $i;done 批量解压的tgz文件的我是用for i in $(ls *.gz);do gzip -d $i;done批量解压的 ...
- 工作随笔——tar命令批量解压
由于linux的tar命令不支持批量解压,所以很多网友编写了好多支持批量解压的shell命令,收集了一下,供大家分享: 第一: for tar in *.tar.gz; do tar xvf $tar ...
- Linux命令:tar命令批量解压方法总结
tar命令批量解压方法总结 (2010-05-24 17:48:46) 转载▼ 标签: tar 批量解压 杂谈 分类: linux学习 由于linux的tar命令不支持批量解压,所以很多网友编写了好多 ...
随机推荐
- Python day15装饰器基本理论,以及结合全局变量模拟session
装饰器(decorator):为其他函数添加附加功能 原则:1.不修改被修饰函数源代码 2.不修改被修饰函数的调用方式 装饰器=高阶函数+函数嵌套+闭包 import time def timmer( ...
- STL_算法_02_排序算法
◆ 常用的排序算法: 1.1.合并(容器A(全部/部分)&容器B(全部/部分)==>容器C(全部/部分),容器C中元素已经排好顺序),返回的值==>iteratorOutBegin ...
- 《剑指offer》第三十一题(栈的压入、弹出序列)
// 面试题31:栈的压入.弹出序列 // 题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是 // 否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1.2.3.4. / ...
- c++ primer plus 第七章 课后题答案
#include <iostream> using namespace std; double HAR_AVG(double, double); void TEST(bool); int ...
- Atcoder Yet Another Palindrome Partitioning(状压dp)
Atcoder Yet Another Palindrome Partitioning 思路: 一个字符串满足条件的情况是奇数字母个数小于等于1,也就是异或起来是1<<j(0<=j& ...
- Codeforces 834D - The Bakery(dp+线段树)
834D - The Bakery 思路:dp[i][j]表示到第j个数为止分成i段的最大总和值. dp[i][j]=max{dp[i-1][x]+c(x+1,j)(i-1≤x≤j-1)},c(x+1 ...
- Java使用Log4记录日志
我们在系统使用中,为了方便查找问题,因此需要记录操作的日志,而目前比较成熟稳定的程序日志记录方式就是Log4,本人也是菜鸟,然后再学习研究中就记录一下使用方式,以方便今后查阅,同时本文章参考了博客园: ...
- 笔试题目练习-python
以下内容包含笔试练习库的题目和代码,题目来自牛客网,仅供参考. # coding = utf-8 import sys def test1(): """ 题目描述:计算字 ...
- sublime插件安装及常用插件配置
1.下载 :百度云 工具中 2.注册 sgbteam Single User License EA7E-1153259 8891CBB9 F1513E4F 1A3405C1 A865D53F 115F ...
- 20170728xlVba SSC_TODAY
Public Sub SSC_TODAY() Dim strText As String Dim Reg As Object, Mh As Object, OneMh As Object Dim i ...