#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/video/background_segm.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <sstream>
using namespace cv;
using namespace std;
Mat frameDiff(Mat prevFrame, Mat curFrame, Mat nextFrame)
{
Mat diffFrames1, diffFrames2, output;
absdiff(nextFrame, curFrame, diffFrames1);
absdiff(curFrame, prevFrame, diffFrames2);
bitwise_and(diffFrames1, diffFrames2, output);
return output;
}
Mat getFrame(VideoCapture cap, float scalingFactor)
{
Mat frame, output;
cap >> frame;
resize(frame, frame, Size(), scalingFactor, scalingFactor, INTER_AREA);
cvtColor(frame, output, CV_BGR2GRAY);
return output;
}
int main(int argc, char* argv[])
{
Mat frame, prevFrame, curFrame, nextFrame;
char ch;
VideoCapture cap(0);
if( !cap.isOpened() )
return -1;
namedWindow("Frame");
float scalingFactor = 0.75;
prevFrame = getFrame(cap, scalingFactor);
curFrame = getFrame(cap, scalingFactor);
nextFrame = getFrame(cap, scalingFactor);
while(true)
{
imshow("Object Movement", frameDiff(prevFrame, curFrame, nextFrame));
prevFrame = curFrame;
curFrame = nextFrame;
nextFrame = getFrame(cap, scalingFactor);
ch = waitKey( 30 );
if (ch == 27) {
break;
}
}
cap.release();
destroyAllWindows();
return 1;
}