目錄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
圖片