#include "opencv2/opencv.hpp" using namespace std; using namespace cv; const int MAX_FEATURES = 500; const int MAX_MOVEMENT = 100; int move_test(Mat& oframe, Mat& frame) { // Select features for optical flow vector ofeatures; goodFeaturesToTrack(oframe, ofeatures, MAX_FEATURES, 0.1, 0.2 ); // Parameters for LK vector new_features; vector status; vector err; TermCriteria criteria(TermCriteria::COUNT | TermCriteria::EPS, 20, 0.03); Size window(10,10); int max_level = 3; int flags = 0; double min_eigT = 0.004; // Lucas-Kanade method calcOpticalFlowPyrLK(oframe, frame, ofeatures, new_features, status, err, window, max_level, criteria, flags, min_eigT ); double max_move = 0; double movement = 0; for(int i=0; i max_move) max_move = movement; } return max_move > MAX_MOVEMENT; } int main(int argc, char *argv[]) { int i = 0; Mat frame; Mat oframe; if (argc != 2) { cout << "USAGE: \n"; return -1; } VideoCapture vid(argv[1]); if (!vid.isOpened()) { cout << "Video corrupt\n"; return -1; } int fps = (int)vid.get(CV_CAP_PROP_FPS); i++; if(!vid.read(oframe)) return 1; cvtColor(oframe, oframe, COLOR_BGR2GRAY); while (1) { if (!vid.read(frame)) break; i++; cvtColor(frame,frame,COLOR_BGR2GRAY); if(move_test(oframe, frame)) cout << i/fps << "\n"; oframe = frame; } return 0; }