之前写的,未加整理;

#include <QCoreApplication>
#include <iostream>
#include <time.h>
#include<sys/io.h>
#include<iostream>
#include<vector>
#include <string>
#include <list>
#include <dirent.h>
#include <sys/stat.h>
#include<opencv2/opencv.hpp>using namespace std;
int g_ntotalFrameNumber,g_ncurrentframe;
double g_currentpercent;#define FRAME_PER_NUME 20
#define FILENAME_SUFFIX_NUM 4
#define INPUT_VIDEO_PATH "/media/t/disk1/HOME/workplace/qt/videotoimage/video/1"
#define OUTPUT_IMAGE_PATH "/media/t/disk1/HOME/workplace/qt/videotoimage/output_image/"//vector<string> getFiles(const string &folder,const bool all /* = true */)
//{//    vector<string> files;
//    list<string> subfolders;
//    subfolders.push_back(folder);//    while (!subfolders.empty()) {//        string current_folder(subfolders.back());//        if (*(current_folder.end() - 1) != '/') {    //确保地址是 “ ..../*” 结尾的
//            current_folder.append("/*");
//        }
//        else {//            current_folder.append("*");
//        }//        subfolders.pop_back();//        struct _finddata_t  file_info;
//        long file_handler = _findfirst(current_folder.c_str(), &file_info);//        while (file_handler != -1)
//        {//            if (all &&
//                (!strcmp(file_info.name, ".") || !strcmp(file_info.name, ".."))) {//                if (_findnext(file_handler, &file_info) != 0) break;
//                continue;
//            }
//#if 0
//            斜杆/ 和 反斜杠\ 的区别基本上就是这些了,下面再讨论一下相对路径和绝对路径。
//                ./SRC/  这样写表示,当前目录中的SRC文件夹;
//                ../SRC/  这样写表示,当前目录的上一层目录中SRC文件夹;
//                /SRC/   这样写表示,项目根目录(可以只磁盘根目录,也可以指项目根目录,具体根据实际情况而定)
//#endif//            if (file_info.attrib & _A_SUBDIR)
//            {//                // it's a sub folder
//                if (all)
//                {//                    // will search sub folder
//                    string folder(current_folder);
//                    folder.pop_back();         //  就是减去最后的*     string 的pop_back Delete last character   Erases the last character of the string, effectively reducing its length by one.
//                    folder.append(file_info.name);//                    subfolders.push_back(folder.c_str());
//                }
//            }
//            else
//            {//                // it's a file
//                string file_path;
//                // current_folder.pop_back();
//                file_path.assign(current_folder.c_str()).pop_back();
//                file_path.append(file_info.name);//                files.push_back(file_path);
//            }//            if (_findnext(file_handler, &file_info) != 0) break;
//        }  // while
//        _findclose(file_handler);
//    }//    return files;
//}
#if 0
int main(int argc, char *argv[])
{time_t t;struct tm * lt;bool f_stop = false;cv::Mat Input;std::string input_video_path = INPUT_VIDEO_PATH;cv::VideoCapture capture(input_video_path);if (!capture.isOpened())std::cout << "fail to open!" << std::endl;g_ntotalFrameNumber = capture.get(CV_CAP_PROP_FRAME_COUNT);std::cout << "整个视频共" << g_ntotalFrameNumber << "帧" << std::endl;//获得帧的宽高int w = static_cast<int>(capture.get(CV_CAP_PROP_FRAME_WIDTH));int h = static_cast<int>(capture.get(CV_CAP_PROP_FRAME_HEIGHT));cv::Size S(w, h);// 视频写入对象cv::VideoWriter writer("/home/t/result.avi", CV_FOURCC('m', 'p', '4', ' v'),25, cv::Size(1280, 720));while (!f_stop ){time (&t);lt = localtime (&t);for (int i = 0;i < 25;i++) {capture >> Input;if(Input.empty()){break;}}if(Input.empty()){break;}writer<<Input;g_currentpercent = int(g_ncurrentframe * 100 / g_ntotalFrameNumber);std::stringstream pathROIss;std::string pathROIs;pathROIss<<"/media/t/disk1/DukTo/Videos/20180518_HIKVISION_HDR_1/20190926"<< lt->tm_hour << lt->tm_min << "_" <<g_ncurrentframe<<".jpg";pathROIss>>pathROIs;imwrite(pathROIs, Input);g_ncurrentframe += 25;}//释放对象capture.release();return 0;
}
#endif
#if 1
//int main(int argc, char *argv[])
//{//    //目标文件夹路径
//    std::string inPath = "/media/t/disk1/DukTo/Videos/*.mp4";//遍历文件夹下的所有.jpg文件
//    //用于查找的句柄
//    long handle;
//    struct _finddata_t fileinfo;
//    //第一次查找
//    handle = _findfirst(inPath.c_str(), &fileinfo);
//    if (handle == -1)
//        return -1;
//    do
//    {//        //找到的文件的文件名
//        printf("%s\n", fileinfo.name);//    } while (!_findnext(handle, &fileinfo));//    _findclose(handle);
//    system("pause");
//    return 0;
//}
void videotoimage(std::string input_video_path, std::string output_image_path, std::string filename)
{time_t t;struct tm * lt;bool f_stop = false;cv::Mat Input;cv::VideoCapture capture(input_video_path);if (!capture.isOpened())std::cout << "fail to open!" << std::endl;g_ntotalFrameNumber = capture.get(CV_CAP_PROP_FRAME_COUNT);std::cout << "整个视频共" << g_ntotalFrameNumber << "帧" << std::endl;//获得帧的宽高int w = static_cast<int>(capture.get(CV_CAP_PROP_FRAME_WIDTH));int h = static_cast<int>(capture.get(CV_CAP_PROP_FRAME_HEIGHT));cv::Size S(w, h);// 视频写入对象cv::VideoWriter writer("/home/t/result.avi", CV_FOURCC('m', 'p', '4', ' v'),25, cv::Size(1280, 720));while (!f_stop ){time (&t);lt = localtime (&t);for (int i = 0;i < FRAME_PER_NUME;i++) {capture >> Input;if(Input.empty()){break;}}if(Input.empty()){break;}writer<<Input;g_currentpercent = int(g_ncurrentframe * 100 / g_ntotalFrameNumber);std::stringstream pathROIss;std::string pathROIs;pathROIss<<output_image_path<<"/"<<filename<<"_"<< lt->tm_hour << lt->tm_min << "_" <<g_ncurrentframe<<".jpg";pathROIss>>pathROIs;imwrite(pathROIs, Input);g_ncurrentframe += FRAME_PER_NUME;}//释放对象capture.release();//return 0;
}
int main()
{string src_video_path = INPUT_VIDEO_PATH;DIR* dir = opendir(src_video_path.data());//打开指定目录dirent* p = NULL;//定义遍历指针while((p = readdir(dir)) != NULL)//开始逐个遍历{//这里需要注意,linux平台下一个目录中有"."和".."隐藏文件,需要过滤掉if(p->d_name[0] != '.')//d_name是一个char数组,存放当前遍历到的文件名{g_ncurrentframe = 0;string dirpath = OUTPUT_IMAGE_PATH;
//            std::stringstream pathROIss;
//            std::string pathROIs;
//            pathROIss<<"/media/t/disk1/DukTo/Videos"<< lt->tm_hour << lt->tm_min << "_" <<g_ncurrentframe<<".jpg";
//            pathROIss>>pathROIs;string str = string(p->d_name);cout<<str<<endl;string videopath = src_video_path + "/";videopath += str;//str.erase(remove(str.begin() , str.end() , '.') , str.end() );str.erase( str.size()-FILENAME_SUFFIX_NUM, FILENAME_SUFFIX_NUM);dirpath += str;mkdir(dirpath.data(),S_IRWXU);videotoimage(videopath,dirpath,str);
//            string name = "/home/xxx/test/" + str;
//            cout<<name<<endl;}}closedir(dir);//关闭指定目录
}#endif

这是ubuntu系统下的代码,windows系统下,你需要将#include<sys/io.h>
修改成#include <direct.h>,将mkdir(dirpath.data(),S_IRWXU);修改成mkdir(dirpath.data());即可。

将视频截取成图片的C++代码相关推荐

  1. Python 将视频 截取 成图片 附cv2处理教程

    import cv2 import time import os input_video = r'E:/Desktop/video/1.mp4' output_dir = r'E:/Desktop/p ...

  2. opencv cv2.imwrite()将视频切割成图片保存失败 + 以及按秒切帧代码

    原因:文件的路径和文件名不能是中文的 代码 按秒切割视频成图片: # 视频切割成图片 import cv2 import glob import osdef video_to_frame(save_p ...

  3. 用python把视频分解成图片

    # 用python把视频分解成图片 import cv2 # 读取一段视频 cap=cv2.VideoCapture("d:/1.mp4") # 用作计数 i=0 # 循环判断视频 ...

  4. python opencv PIL 视频分割成图片 图片合成为视频 修改图片大小(抗锯齿)

    Python代码将原有的视频分割成图片,我的例子是一帧一帧的分割 用python+opencv完成视频的分割 import cv2 #导入opencv模块 print(2) #测试是否运行 vc=cv ...

  5. python 脚本将视频转化成图片 | python scripts to convert video to pictures

    python 脚本将视频转化成图片 | python scripts to convert video to pictures python video_to_images.py 运行时,修改输入.输 ...

  6. 怎样将手机视频转换成图片?手机怎么把视频做成gif动图?

    怎样将手机视频转换成图片?一般在需要将视频转换成gif格式的图片时,需要在电脑上使用专业的视频处理软件进行操作,但是现在有很多视频素材是从手机上保存的,如果需要从手机上把视频转gif应该怎么操作呢?今 ...

  7. python将视频分割成图片

    使用python将视频分割成图片 python版本: 3.7.2 使用到的库:opencv (安装命令:pip install opencv-python) import cv2# 定义保存图片函数 ...

  8. 将视频抽取成图片,并对图片进行批量命名opencv代码

    运行环境:vs2015+opencv3.2,接近类似环境都可以,vs2012以上,opencv3.0以上 #include <iostream> //#include "cv.h ...

  9. 【OpenCV入门到精通之九】OpenCV之视频截取、图片与视频互转

    一.图片与视频的关系 图片是静止的,把众多的有渐变规律的图片,按时间组织起来,即构成视频. 视频是连动的,把视频中每个瞬间的画面停顿下来,则画面显示的就是图片. 视频帧 视频中每个瞬间的画面停顿下来的 ...

  10. 如何把视频分解成图片?怎么逐帧提取视频中的图片?

    在工作中遇到需要将一段视频逐帧分解成图片该怎么做?小编在这这里给大家分享一款视频提取图片(https://www.yasuoshipin.com工具,一起来了解一下吧. 在所有功能中,选择视频提取图片 ...

最新文章

  1. 【Python】百度首页GIF动画的爬虫
  2. CentOS 7 修改时区例如上海时区
  3. 微软私有云分享(R2)1-自定义脚本
  4. 【Android】Camera 使用浅析
  5. pygame中Rect(left, top, width, height)的参数详解
  6. AngularJs学习笔记(四)
  7. Redis学习一Redis的介绍与安装部署
  8. oracle常用用户权限,oracle创建新用户及授予常用权限
  9. server2019 sqlcmd命令安装_Ubuntu20.04LTS安装MS sql-server2019的方法
  10. 等式与不等式约束的序列二次规划(SQP)
  11. datapump跨平台升级迁移的总结
  12. Onvif之框架生成-基于gsoap2.8.27
  13. 安全数组-简易矩阵容器-STL及迭代器仿写作业
  14. 带滤镜拍照的app_这8款拍照修图APP,简直就是逼格神器
  15. bootstrap菜单html,Bootstrap实现下拉菜单效果
  16. ios订阅其他国家节假日日历
  17. js 周期性定时器
  18. 本地搭建我的世界服务器(可联机)
  19. iOS开发 - 给Label加下划线、中划线
  20. 攀登数据基础设施高峰,这是一场勇敢者的游戏

热门文章

  1. 手机、PDA、车载GPS导航入门手册
  2. 完全兼容ADI的ADM2582E/ADM2587E的(MORNSUN)TD(H)541S485H
  3. idea的设置,导致list长度只有1000
  4. kindle看pdf不清楚_无法在Kindle上阅读PDF格式的电子书,该怎么办呢?
  5. 金蝶K3案例教程简介
  6. mysql5.464位下载_MySQL Front 64位
  7. 没有项目经验,如何书写漂亮的简历?
  8. Hadoop和Hbase版本选择
  9. 风灵月影捆绑软件解决办法(修改器)
  10. 智慧城市顶层设计与不确定性