opencv读取视频并保存视频(C++)

main()
{int iFrameIndex = 0;cv::VideoCapture cap;cap.open("/root/zhangsong/yolo-tensorrt-master/3.mp4");cv::Mat mat_image;std::string videoname = "/root/zhangsong/yolo-tensorrt-master/build/tracker_result.avi";int videoFps = cap.get(CV_CAP_PROP_FPS);int myFourCC = cv::VideoWriter::fourcc('m', 'p', '4', 'v');cv::VideoWriter g_writer = cv::VideoWriter(videoname, myFourCC, videoFps, cv::Size(cap.get(cv::CAP_PROP_FRAME_WIDTH), cap.get(cv::CAP_PROP_FRAME_HEIGHT)));while(true){cap>>mat_image;cv::Mat mat_temp = mat_image.clone();iFrameIndex++;//cv::imwrite("000269_.jpg",mat_temp);g_writer << mat_temp;cv::namedWindow("image",0);cv::imshow("image", mat_temp);cv::waitKey(1);}g_writer.release();
}

opencv读取视频并保存视频(python)

import os
import cv2if __name__ == "__main__":os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'cap = cv2.VideoCapture('F:/gongye/data/video/IMG_3451.mp4')fps = cap.get(cv2.CAP_PROP_FPS)g_ntotalFrameNumber = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))print(size)# 定义编码格式mpge-4fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', '2')# 定义视频文件输入对象savevideopath = 'F:/gongye/data/video/result01.avi'outVideo = cv2.VideoWriter(savevideopath, fourcc, fps, size)# 获取视频流打开状态if cap.isOpened():rval, frame = cap.read()print('ture')else:rval = Falseprint('False')tot = 1#c = 1while (rval):rval, frame = cap.read()  # 返回两个值,第一个为bool类型,如果读到帧返回True,如果没读到帧返回False,第二个值为帧图像#cv2.imshow('test', frame)# 每间隔20帧保存一张图像帧# if tot % 20 ==0 :#   cv2.imwrite('cut/'+'cut_'+str(c)+'.jpg',frame)#   c+=1tot += 1print('tot=', tot)outVideo.write(frame)#cv2.waitKey(1)cap.release()outVideo.release()#cv2.destroyAllWindows()

将视频截取成图片

#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

AI视屏处理(C++)相关推荐

  1. 1799元起!66W超级快充+120Hz全视屏 荣耀Play5 活力版正式发布

    10月25日晚,荣耀召开新品发布会,正式发布荣耀Play5系列新品荣耀Play5 活力版.荣耀Play5 活力版支持66W超级快充,配备6.67英寸120Hz全视屏,同时支持6400万像素超清影像.智 ...

  2. 电脑如何批量下载哔哔视屏_我是电脑哔哔哔哔哔

    电脑如何批量下载哔哔视屏 编者的信 (Letter from the Editor) Here's my routine these days: I wake up at about 7:30 a.m ...

  3. 小冲哥c语言视频自学网,C语言二级教学视屏课件_51自学网_小冲哥.doc

    C语言二级教学视屏课件_51自学网_小冲哥.doc C语言二级教学视屏课件(51自学网 小冲哥)1. 第一章设计语言的讲解2. 第一章程序的算法与结构设计.3. 第二章C程序的设计初步了解.4. 第二 ...

  4. Android 实现视屏播放器、边播边缓存功能,附源码

    热文导读 | 点击标题阅读 [墙裂推荐]AndroidVideoCache:实现视屏播放边下边播 吊炸天!74款APP完整源码! 一份年薪30万的Android面试宝典,附答案 来源:http://w ...

  5. 一体教学电脑鸿蒙,华为P50最新确认,一体全视屏+鸿蒙OS+双8500万,这才是华为...

    智能手机行业是一个竞争相当残酷的行业,任何一家手机厂商想要生存,需要时刻保持警惕,为此不少的手机厂商都保持着高速发展的状态.其中发展势头最猛的就属华为这家厂商,从刚开始的默默无闻,来到了国产手机厂商领 ...

  6. windows如何实现视屏自动定时、全屏、轮播 播放

    windows如何实现视屏自动定时.全屏.轮播 播放 一.下载ffmpeg 二.全屏播放 三.定时播放 本文的实现方式是通过ffmpeg工具实现的,想要了解这个工具有多强大,请自行移步Google 一 ...

  7. PM——视屏操作软件

    一,打开视屏编辑软件,将要编辑的视屏拖入视屏编辑栏,单个视屏剪辑.多个视屏合成,视屏中增加logo等都可以用到本软件: 二,将剪辑好的视屏,以mp4格式导出到本地

  8. android倒计时录制视频下载,android录制视屏(预览,倒计时)

    android用mediarecord录制视屏,可以设置视屏格式,大小,还有拍摄前预览,倒计时功能要自己用hander做. 1,CameraPreview.java //预览class public ...

  9. android带动画的饼图,Android部分源码资源共享(视屏转GIF图片工具、仿抖音、仿朋友圈、仿红包、饼状图、引导图,图灵源码等)...

    视屏转为gif图片工具: 下载地址:CSDN 下载 1.封装了各项工具类,例如,日志,打印,缓存等,可直接使用项目 百度网盘:下载    提取码:fq07 2.Android高仿抖音 1.项目 的bu ...

最新文章

  1. 如果你要对一个变量进行反向传播,你必须保证其为Tensor
  2. lucene DocValues——没有看懂
  3. mysql数据库授权
  4. ie8下ewebeditor无效的解决办法
  5. 华为手机像素密度排行_2020上半年手机芯片十大排行:华为麒麟990第四,骁龙865第一...
  6. 为何苦命干活的人成不了专家?
  7. flowable 和 activty工作流 使用视图方案解决系统内部用户、组、用户和组关联
  8. 博达3956交换机配置手册_网络设备维保浅谈之交换机维保
  9. Java基础日常总结!!
  10. Python自省函数getattr的用法
  11. android学习笔记---64_ListView数据异步加载与AsyncTask
  12. Python-Pandas
  13. 数据库管理软件SQLPro for SQLite for Mac 2022.30
  14. Python 中的 if __name__ == '__main__'
  15. 用Java实现多线程下载
  16. ppt太大了怎么压缩?
  17. word流程图怎么使箭头对齐_word怎么将图形对齐
  18. 第一次让你从一架纸飞机的角度看世界
  19. Python数值运算操作符
  20. 豆沙绿护眼色样式在html中的代码

热门文章

  1. SN74LS148优先编码器的级联使用
  2. APP测试与WEB测试的区别
  3. 本地BLAST的使用方法及基本操作步骤
  4. 谁说程序员年龄大了,就没出路了?
  5. sequelize模型关联_Node.js Sequelize 模型(表)之间的关联及关系模型的操作
  6. `Supimo` 历史,人文,哲学,人物,摘录
  7. hgoi#20190821
  8. jenkins 用户名密码错误,无法登录
  9. sass、scss、和css的关系
  10. php 百度逆地理编码,百度地图开放平台 Web服务API --Geocoding API (地理编码和逆地理编码)...