AI视屏处理(C++)
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++)相关推荐
- 1799元起!66W超级快充+120Hz全视屏 荣耀Play5 活力版正式发布
10月25日晚,荣耀召开新品发布会,正式发布荣耀Play5系列新品荣耀Play5 活力版.荣耀Play5 活力版支持66W超级快充,配备6.67英寸120Hz全视屏,同时支持6400万像素超清影像.智 ...
- 电脑如何批量下载哔哔视屏_我是电脑哔哔哔哔哔
电脑如何批量下载哔哔视屏 编者的信 (Letter from the Editor) Here's my routine these days: I wake up at about 7:30 a.m ...
- 小冲哥c语言视频自学网,C语言二级教学视屏课件_51自学网_小冲哥.doc
C语言二级教学视屏课件_51自学网_小冲哥.doc C语言二级教学视屏课件(51自学网 小冲哥)1. 第一章设计语言的讲解2. 第一章程序的算法与结构设计.3. 第二章C程序的设计初步了解.4. 第二 ...
- Android 实现视屏播放器、边播边缓存功能,附源码
热文导读 | 点击标题阅读 [墙裂推荐]AndroidVideoCache:实现视屏播放边下边播 吊炸天!74款APP完整源码! 一份年薪30万的Android面试宝典,附答案 来源:http://w ...
- 一体教学电脑鸿蒙,华为P50最新确认,一体全视屏+鸿蒙OS+双8500万,这才是华为...
智能手机行业是一个竞争相当残酷的行业,任何一家手机厂商想要生存,需要时刻保持警惕,为此不少的手机厂商都保持着高速发展的状态.其中发展势头最猛的就属华为这家厂商,从刚开始的默默无闻,来到了国产手机厂商领 ...
- windows如何实现视屏自动定时、全屏、轮播 播放
windows如何实现视屏自动定时.全屏.轮播 播放 一.下载ffmpeg 二.全屏播放 三.定时播放 本文的实现方式是通过ffmpeg工具实现的,想要了解这个工具有多强大,请自行移步Google 一 ...
- PM——视屏操作软件
一,打开视屏编辑软件,将要编辑的视屏拖入视屏编辑栏,单个视屏剪辑.多个视屏合成,视屏中增加logo等都可以用到本软件: 二,将剪辑好的视屏,以mp4格式导出到本地
- android倒计时录制视频下载,android录制视屏(预览,倒计时)
android用mediarecord录制视屏,可以设置视屏格式,大小,还有拍摄前预览,倒计时功能要自己用hander做. 1,CameraPreview.java //预览class public ...
- android带动画的饼图,Android部分源码资源共享(视屏转GIF图片工具、仿抖音、仿朋友圈、仿红包、饼状图、引导图,图灵源码等)...
视屏转为gif图片工具: 下载地址:CSDN 下载 1.封装了各项工具类,例如,日志,打印,缓存等,可直接使用项目 百度网盘:下载 提取码:fq07 2.Android高仿抖音 1.项目 的bu ...
最新文章
- 如果你要对一个变量进行反向传播,你必须保证其为Tensor
- lucene DocValues——没有看懂
- mysql数据库授权
- ie8下ewebeditor无效的解决办法
- 华为手机像素密度排行_2020上半年手机芯片十大排行:华为麒麟990第四,骁龙865第一...
- 为何苦命干活的人成不了专家?
- flowable 和 activty工作流 使用视图方案解决系统内部用户、组、用户和组关联
- 博达3956交换机配置手册_网络设备维保浅谈之交换机维保
- Java基础日常总结!!
- Python自省函数getattr的用法
- android学习笔记---64_ListView数据异步加载与AsyncTask
- Python-Pandas
- 数据库管理软件SQLPro for SQLite for Mac 2022.30
- Python 中的 if __name__ == '__main__'
- 用Java实现多线程下载
- ppt太大了怎么压缩?
- word流程图怎么使箭头对齐_word怎么将图形对齐
- 第一次让你从一架纸飞机的角度看世界
- Python数值运算操作符
- 豆沙绿护眼色样式在html中的代码
热门文章
- SN74LS148优先编码器的级联使用
- APP测试与WEB测试的区别
- 本地BLAST的使用方法及基本操作步骤
- 谁说程序员年龄大了,就没出路了?
- sequelize模型关联_Node.js Sequelize 模型(表)之间的关联及关系模型的操作
- `Supimo` 历史,人文,哲学,人物,摘录
- hgoi#20190821
- jenkins 用户名密码错误,无法登录
- sass、scss、和css的关系
- php 百度逆地理编码,百度地图开放平台 Web服务API --Geocoding API (地理编码和逆地理编码)...