目录ios
注:原创不易,转载请务必注明原做者和出处,感谢支持!ide
利用OpenCV提供的VideoCapture类能够轻松实现保存视频中帧的功能。下面代码能够将一个视频文件中的全部帧抽取并保存成JPG图像。spa
videoName
- 视频文件名
imagePath
- 图片保存的路径
imagePrefix
- 图片文件前缀字符串rest
图片完整路径:imagePath + "/" + imagePrefix + to_string(i) + ".jpg"
code
void ExtractFrames(const string &videoName, const string &imagePath, const string &imagePrefix) { VideoCapture cap; Mat img; // 打开视频 cap.open(videoName); if (!cap.isOpened()) { cout << "Error : could not load video" << endl; exit(-1); } // 取得视频帧数 size_t count = (size_t)cap.get(CV_CAP_PROP_FRAME_COUNT); for (size_t i = 0; i < count; ++i) { cap >> img; string imgName = imagePath + "/" + imagePrefix + to_string(i) + ".jpg"; // 将当前帧保存 imwrite(imgName, img); cout << "Frames " << i << " ... done" << endl; } }
ExtractFrames
调用实例:视频
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main(int argc, char *argv[]) { ExtractFrames("E:/images/video/1.mp4", "E:/images/video", "red-forest"); return 0; }
抽取出的图片将被保存为:blog
red-forest0.jpg red-forest1.jpg red-forest2.jpg ...
red-forest45.jpg
图片