1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
#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; }
|