#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <string>
#include <stdio.h>
#include <sys/stat.h>
using namespace std;
using namespace cv;
string num2str(int i)
{
char ss[10];
sprintf(ss, "%05d", i);
return ss;
}
int main(int argc, char* argv[])
{
std::string VideoFile;
std::string SaveDir = "resultFrames";
if (argc == 2) {
VideoFile = argv[1];
}
else if (argc == 3) {
VideoFile = argv[1];
SaveDir = argv[2];
}
else {
cout << "Usage: " << argv[0]
<< " VideoFile [FrameSavedDir]" << endl;
return -1;
}
VideoCapture capture(VideoFile.c_str());
if (!capture.isOpened())
cout << "fail to open!" << endl;
long totalFrameNumber = capture.get(CV_CAP_PROP_FRAME_COUNT);
std::cout << "Total frames[ " << totalFrameNumber << " ]" << std::endl;
long frameToStart = 0;
capture.set(CV_CAP_PROP_POS_FRAMES, frameToStart);
cout << "The start frame to extract: " << frameToStart << endl;
double rate = capture.get(CV_CAP_PROP_FPS);
cout << "The frame rate is: " << rate << endl;
bool stop = false;
Mat frame;
std::string img_name;
#ifdef DISPLAY
namedWindow("Extracted frame");
int delay = 1000 / rate;
#endif
long currentFrame = frameToStart;
#ifdef DISPLAY
int kernel_size = 3;
Mat kernel = Mat::ones(kernel_size,
kernel_size, CV_32F) / (float)(kernel_size*kernel_size);
#endif
while (!stop)
{
if (!capture.read(frame))
{
goto RELEASE;
}
img_name = SaveDir + "/" + num2str(currentFrame) + ".jpg";
cv::imwrite(img_name.c_str(), frame);
#ifdef DISPLAY
imshow("Extracted frame", frame);
filter2D(frame, frame, -1, kernel);
imshow("after filter", frame);
#endif
if (((currentFrame + 1) % 100) == 0) cout << "-" << endl;
else cout << "-";
#ifdef DISPLAY
int c = waitKey(delay);
if ((char)c == 27) {
stop = true;
}
if (c >= 0) {
waitKey(0);
}
#endif
currentFrame++;
}
RELEASE:
cout << "\nRead total frames: " << currentFrame - frameToStart << endl;
cout << "please check the results in dir: " << SaveDir << endl;
capture.release();
waitKey(0);
return 0;
}
extractFrames.exe test.mp4 C:\saveDir\