mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
1.9 KiB
82 lines
1.9 KiB
/* |
|
* FGBGTest.cpp |
|
* |
|
* Created on: May 7, 2012 |
|
* Author: Andrew B. Godbehere |
|
*/ |
|
|
|
#include <opencv2/opencv.hpp> |
|
#include <iostream> |
|
|
|
using namespace cv; |
|
|
|
static void help() |
|
{ |
|
std::cout << |
|
"\nA program demonstrating the use and capabilities of a particular BackgroundSubtraction\n" |
|
"algorithm described in A. Godbehere, A. Matsukawa, K. Goldberg, \n" |
|
"\"Visual Tracking of Human Visitors under Variable-Lighting Conditions for a Responsive\n" |
|
"Audio Art Installation\", American Control Conference, 2012, used in an interactive\n" |
|
"installation at the Contemporary Jewish Museum in San Francisco, CA from March 31 through\n" |
|
"July 31, 2011.\n" |
|
"Call:\n" |
|
"./BackgroundSubtractorGMG_sample\n" |
|
"Using OpenCV version " << CV_VERSION << "\n"<<std::endl; |
|
} |
|
|
|
int main(int argc, char** argv) |
|
{ |
|
help(); |
|
|
|
initModule_video(); |
|
setUseOptimized(true); |
|
setNumThreads(8); |
|
|
|
Ptr<BackgroundSubtractorGMG> fgbg = Algorithm::create<BackgroundSubtractorGMG>("BackgroundSubtractor.GMG"); |
|
if (fgbg.empty()) |
|
{ |
|
std::cerr << "Failed to create BackgroundSubtractor.GMG Algorithm." << std::endl; |
|
return -1; |
|
} |
|
|
|
fgbg->set("initializationFrames", 20); |
|
fgbg->set("decisionThreshold", 0.7); |
|
|
|
VideoCapture cap; |
|
if (argc > 1) |
|
cap.open(argv[1]); |
|
else |
|
cap.open(0); |
|
|
|
if (!cap.isOpened()) |
|
{ |
|
std::cerr << "Cannot read video. Try moving video file to sample directory." << std::endl; |
|
return -1; |
|
} |
|
|
|
Mat frame, fgmask, segm; |
|
|
|
namedWindow("FG Segmentation", WINDOW_NORMAL); |
|
|
|
for (;;) |
|
{ |
|
cap >> frame; |
|
|
|
if (frame.empty()) |
|
break; |
|
|
|
(*fgbg)(frame, fgmask); |
|
|
|
frame.copyTo(segm); |
|
add(frame, Scalar(100, 100, 0), segm, fgmask); |
|
|
|
imshow("FG Segmentation", segm); |
|
|
|
int c = waitKey(30); |
|
if (c == 'q' || c == 'Q' || (c & 255) == 27) |
|
break; |
|
} |
|
|
|
return 0; |
|
} |
|
|
|
|