OpenCV视频解单帧例子
来源:互联网 发布:淘宝账号异常解封方法 编辑:程序博客网 时间:2024/05/29 16:36
OpenCV视频解单帧例子
主要利用VideoCapture类。
/* * 视频解单帧 */#include <iostream>#include <string>#include <unistd.h>#include <stdlib.h>#include <dirent.h>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>using namespace std;using namespace cv;int trackbarPosition;VideoCapture capture;bool isFileExist(const char *filePath){ if (filePath == NULL) return false; else if (access(filePath, F_OK) == 0) return true; else return false;}bool isDirExist(const char *dirPath){ if (dirPath == NULL || opendir(dirPath) == NULL) return false; else return true;}void setFramePosition(int position, void *){ capture.set(CV_CAP_PROP_POS_FRAMES, position); trackbarPosition = position;}int main(){ const string videoName = "/home/corfox/Data/GOPR0451_removefisheye.mp4"; const string outputPath = "/home/corfox/Data/GOPR"; int frameNum = 1; ostringstream numToStr; string frameName; Mat frame; double frameScale = 0.5; // 视频缩放因子 capture.open(videoName); if (!capture.isOpened()) return 1; const string windowName = "uncompress video"; const string trackbarName = "position"; namedWindow(windowName); int frameNums = capture.get(CV_CAP_PROP_FRAME_COUNT); if (frameNums >= 0) createTrackbar(trackbarName, windowName, &trackbarPosition, frameNums, setFramePosition); bool stop = false; int selectIndex = -1; int subDirName = 1; // 创建的子文件夹名 int flag; int frameWidth = capture.get(CV_CAP_PROP_FRAME_WIDTH) * frameScale; int frameHight = capture.get(CV_CAP_PROP_FRAME_HEIGHT) * frameScale; while(!stop) { if (!capture.read(frame)) break; resize(frame, frame, Size(frameWidth, frameHight)); trackbarPosition++; setTrackbarPos(trackbarName, windowName, trackbarPosition); imshow(windowName, frame); flag = waitKey(10); if (flag == 27) // ESC stop = true; else if (flag == 115 || flag == 83) // 's' or 'S' { selectIndex = 0; cout << "You pressed the key of 's' to save frame." << endl; } else if (flag == 101 || flag == 69) // 'e' or 'E' { selectIndex = 1; cout << "You pressed the key of 'e' to stop saving frame." << endl; } else if (flag == 109 || flag == 77) // 'm' or 'M', to mkdir { string dirName; numToStr << outputPath << "/" << subDirName; dirName = numToStr.str(); if (!isDirExist(dirName.c_str())) { dirName = "mkdir " + dirName; system(dirName.c_str()); } frameNum = 1; subDirName++; numToStr.str(""); cout << "You pressed the key of 'm' to make a directory named the incremental digit number (1, 2, ...)." << endl; } switch (selectIndex) { case 0: numToStr << outputPath << "/" << (subDirName - 1) << "/" << frameNum << ".jpg"; frameName = numToStr.str(); frameNum++; imwrite(frameName, frame); numToStr.str(""); frameName.clear(); break; case 1: selectIndex = -1; break; default: break; } frame.release(); } capture.release(); return 0;}
0 0
- OpenCV视频解单帧例子
- 用OpenCV读取视频的简单例子
- c++ 11多线程例子 opencv读入视频设置滚动条
- OPENCV例子
- opencv 视频
- OPENCV编写播放AVI格式视频例子时发生的错误
- OpenCV SURF例子注解
- OpenCV SURF例子注解
- OpenCv ORB例子代码
- OpenCv ORB例子代码
- 人脸--opencv例子
- 简单应用OpenCV例子
- OpenCv ORB例子代码
- opencv全景拼接例子
- opencv直方图统计例子
- opencv 简单的例子
- opencv的使用例子
- opencv kmeans 算法例子
- 学习JAVA之路(五、if、switch训练篇)
- 《iOS Human Interface Guidelines》——Table View
- IBM DB2数据导出为EXCEL
- oracle数据库用户密码将要过期处理办法(ORA-28002)
- Video Segmentation by Non-Local Consensus Voting
- OpenCV视频解单帧例子
- C++的精髓——虚函数原理
- 数据库数据用CSV导出带出表头
- Kafka consumer分析
- Java Map 排序
- EF 通用数据层父类方法小结
- appframework基础 : a标签的使用
- CSS样式优先级与权重计算方式
- 库-libuv:概述