spyglass 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +6 -1
- data/examples/background_subtractor.rb +1 -1
- data/ext/spyglass/background_subtractor.cc +84 -29
- data/ext/spyglass/background_subtractor.h +11 -4
- data/ext/spyglass/bgslib_bgs.h +67 -0
- data/ext/spyglass/bgslib_bgs_params.h +60 -0
- data/ext/spyglass/bgslib_dp_prati_mediod_bgs.cc +79 -0
- data/ext/spyglass/bgslib_dp_prati_mediod_bgs.h +53 -0
- data/ext/spyglass/bgslib_image.cc +77 -0
- data/ext/spyglass/bgslib_image.h +365 -0
- data/ext/spyglass/bgslib_prati_mediod_bgs.cc +276 -0
- data/ext/spyglass/bgslib_prati_mediod_bgs.h +142 -0
- data/ext/spyglass/contour.cc +0 -2
- data/ext/spyglass/extconf.rb +1 -0
- data/ext/spyglass/prelude.h +1 -1
- data/ext/spyglass/spyglass.cc +1 -1
- data/lib/spyglass/version.rb +2 -2
- data/spec/spyglass/background_subtractor_spec.rb +23 -18
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a505d1ba6c6d3a5e1016de5742b9c2d5f3eeef3
|
4
|
+
data.tar.gz: 78af742887c6c26220f8890fa499c2a513157e0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e65815ef5337b98bfed88b0099c7e9866134f3d7d0eb4a70438f547d32b6e2ff5d5e183661a72e86866aeb7b0e60eb7149b6c69f8f48904394471bcaec494452
|
7
|
+
data.tar.gz: 0e5d01e6e0087b0f01379071c32c27c16eb467081d7bd5d28c59db6bbd7439be4ef4b5e51ee3ca180efd5789d2c66367c2b38814cfe01cb846e7dee1556a90f3
|
data/README.md
CHANGED
@@ -21,8 +21,13 @@ There is a lot left to implement, as I've really only ported the parts of the AP
|
|
21
21
|
* Documentation
|
22
22
|
* More tests
|
23
23
|
|
24
|
+
Acknowledgements
|
25
|
+
================
|
26
|
+
|
27
|
+
This code contains parts of [BGSLibrary](code.google.com/p/bgslibrary)
|
28
|
+
|
24
29
|
Code Status
|
25
30
|
===========
|
26
31
|
|
27
32
|
* [](https://travis-ci.org/andremedeiros/spyglass)
|
28
|
-
* [](https://gemnasium.com/andremedeiros/spyglass)
|
33
|
+
* [](https://gemnasium.com/andremedeiros/spyglass)
|
@@ -9,7 +9,7 @@ WARNING: This demo might not work well with cameras that do auto-exposure.
|
|
9
9
|
|
10
10
|
eos
|
11
11
|
|
12
|
-
bg = BackgroundSubtractor.new
|
12
|
+
bg = BackgroundSubtractor::MOG2.new
|
13
13
|
window = GUI::Window.new("Beach!")
|
14
14
|
cap = VideoCapture.new 0, width: 640, height: 480
|
15
15
|
frame = Image.new
|
@@ -1,30 +1,67 @@
|
|
1
1
|
#include "background_subtractor.h"
|
2
2
|
|
3
|
-
static VALUE
|
3
|
+
static VALUE BackgroundSubtractorModule;
|
4
|
+
static VALUE BGSMOGClass;
|
5
|
+
static VALUE BGSMOG2Class;
|
6
|
+
static VALUE BGSGMGClass;
|
7
|
+
static VALUE BGSPratiMediodClass;
|
4
8
|
|
5
9
|
namespace Spyglass {
|
6
10
|
namespace BackgroundSubtractor {
|
7
|
-
void
|
8
|
-
//
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
rb_define_method(
|
11
|
+
void define_ruby_types() {
|
12
|
+
// Module definition
|
13
|
+
BackgroundSubtractorModule = rb_define_module_under(Spyglass::get_ruby_module(), "BackgroundSubtractor");
|
14
|
+
|
15
|
+
// Class definition: MOG
|
16
|
+
BGSMOGClass = rb_define_class_under(BackgroundSubtractorModule, "MOG", rb_cObject);
|
17
|
+
rb_define_alloc_func(BGSMOGClass, rb_mog_alloc);
|
18
|
+
rb_define_method(BGSMOGClass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
|
19
|
+
rb_define_method(BGSMOGClass, "subtract", RUBY_METHOD_FUNC(rb_subtract), -1);
|
20
|
+
|
21
|
+
// Class definition: MOG2
|
22
|
+
BGSMOG2Class = rb_define_class_under(BackgroundSubtractorModule, "MOG2", rb_cObject);
|
23
|
+
rb_define_alloc_func(BGSMOG2Class, rb_mog2_alloc);
|
24
|
+
rb_define_method(BGSMOG2Class, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
|
25
|
+
rb_define_method(BGSMOG2Class, "subtract", RUBY_METHOD_FUNC(rb_subtract), -1);
|
26
|
+
|
27
|
+
// Class definition: GMG
|
28
|
+
BGSGMGClass = rb_define_class_under(BackgroundSubtractorModule, "GMG", rb_cObject);
|
29
|
+
rb_define_alloc_func(BGSGMGClass, rb_gmg_alloc);
|
30
|
+
rb_define_method(BGSGMGClass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
|
31
|
+
rb_define_method(BGSGMGClass, "subtract", RUBY_METHOD_FUNC(rb_subtract), -1);
|
32
|
+
|
33
|
+
// Class definition: PratiMediod
|
34
|
+
BGSPratiMediodClass = rb_define_class_under(BackgroundSubtractorModule, "PratiMediod", rb_cObject);
|
35
|
+
rb_define_alloc_func(BGSPratiMediodClass, rb_prati_mediod_alloc);
|
36
|
+
rb_define_method(BGSPratiMediodClass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
|
37
|
+
rb_define_method(BGSPratiMediodClass, "subtract", RUBY_METHOD_FUNC(rb_subtract), -1);
|
15
38
|
}
|
16
39
|
|
17
|
-
VALUE
|
18
|
-
return
|
40
|
+
VALUE get_ruby_module() {
|
41
|
+
return BackgroundSubtractorModule;
|
19
42
|
}
|
20
43
|
|
21
|
-
static VALUE
|
22
|
-
cv::
|
23
|
-
return Data_Wrap_Struct(
|
44
|
+
static VALUE rb_mog_alloc(VALUE self) {
|
45
|
+
cv::BackgroundSubtractor *bg = new cv::BackgroundSubtractorMOG();
|
46
|
+
return Data_Wrap_Struct(BGSMOGClass, NULL, rb_free, bg);
|
24
47
|
}
|
25
48
|
|
26
|
-
static
|
27
|
-
bg
|
49
|
+
static VALUE rb_mog2_alloc(VALUE self) {
|
50
|
+
cv::BackgroundSubtractor *bg = new cv::BackgroundSubtractorMOG2();
|
51
|
+
return Data_Wrap_Struct(BGSMOG2Class, NULL, rb_free, bg);
|
52
|
+
}
|
53
|
+
|
54
|
+
static VALUE rb_gmg_alloc(VALUE self) {
|
55
|
+
cv::BackgroundSubtractor *bg = new cv::BackgroundSubtractorGMG();
|
56
|
+
return Data_Wrap_Struct(BGSGMGClass, NULL, rb_free, bg);
|
57
|
+
}
|
58
|
+
|
59
|
+
static VALUE rb_prati_mediod_alloc(VALUE self) {
|
60
|
+
cv::BackgroundSubtractor *bg = new DPPratiMediodBGS();
|
61
|
+
return Data_Wrap_Struct(BGSPratiMediodClass, NULL, rb_free, bg);
|
62
|
+
}
|
63
|
+
|
64
|
+
static void rb_free(cv::BackgroundSubtractor *bg) {
|
28
65
|
delete bg;
|
29
66
|
}
|
30
67
|
|
@@ -35,15 +72,33 @@ namespace Spyglass {
|
|
35
72
|
if(!RTEST(opts))
|
36
73
|
return self;
|
37
74
|
|
38
|
-
cv::
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
75
|
+
cv::BackgroundSubtractor *bg = SG_GET_BG_SUBTRACTOR(self);
|
76
|
+
|
77
|
+
if(CLASS_OF(self) == BGSMOGClass) {
|
78
|
+
SG_OPTION(opts, int, history, 200, NUM2INT);
|
79
|
+
SG_OPTION(opts, int, mixtures, 5, NUM2INT);
|
80
|
+
SG_OPTION(opts, double, background_ratio, 0.7, NUM2DBL);
|
81
|
+
|
82
|
+
bg->set("history", history);
|
83
|
+
bg->set("nmixtures", mixtures);
|
84
|
+
bg->set("backgroundRatio", background_ratio);
|
85
|
+
} else if(CLASS_OF(self) == BGSMOG2Class) {
|
86
|
+
SG_OPTION(opts, int, history, 500, NUM2INT);
|
87
|
+
SG_OPTION(opts, double, threshold, 8.0, NUM2DBL);
|
88
|
+
SG_OPTION(opts, bool, shadow_detection, true, RTEST);
|
89
|
+
|
90
|
+
bg->set("history", history);
|
91
|
+
bg->set("varThreshold", threshold);
|
92
|
+
bg->set("detectShadows", shadow_detection);
|
93
|
+
} else if(CLASS_OF(self) == BGSPratiMediodClass) {
|
94
|
+
SG_OPTION(opts, int, history, 16, NUM2INT);
|
95
|
+
SG_OPTION(opts, int, threshold, 30, NUM2INT);
|
96
|
+
SG_OPTION(opts, int, sampling_rate, 5, NUM2INT);
|
97
|
+
|
98
|
+
bg->set("historySize", history);
|
99
|
+
bg->set("threshold", threshold);
|
100
|
+
bg->set("samplingRate", sampling_rate);
|
101
|
+
}
|
47
102
|
|
48
103
|
return self;
|
49
104
|
}
|
@@ -61,13 +116,13 @@ namespace Spyglass {
|
|
61
116
|
|
62
117
|
|
63
118
|
if(RTEST(learn_rate) && TYPE(learn_rate) != T_FLOAT && TYPE(learn_rate) != T_FIXNUM)
|
64
|
-
|
65
|
-
|
119
|
+
rb_raise(rb_eTypeError, "wrong argument type %s (expected Float or Fixnum)",
|
120
|
+
rb_obj_classname(learn_rate));
|
66
121
|
|
67
122
|
rate = RTEST(learn_rate) ? NUM2DBL(learn_rate) : -1.0;
|
68
123
|
|
69
|
-
cv::
|
70
|
-
cv::Mat *img
|
124
|
+
cv::BackgroundSubtractor *bg = SG_GET_BG_SUBTRACTOR(self);
|
125
|
+
cv::Mat *img = SG_GET_IMAGE(image);
|
71
126
|
|
72
127
|
cv::Mat *delta = new cv::Mat();
|
73
128
|
(*bg)(*img, *delta, rate);
|
@@ -3,15 +3,22 @@
|
|
3
3
|
|
4
4
|
#include "spyglass.h"
|
5
5
|
|
6
|
+
#include "bgslib_dp_prati_mediod_bgs.h"
|
7
|
+
|
6
8
|
namespace Spyglass {
|
7
9
|
namespace BackgroundSubtractor {
|
8
|
-
void
|
9
|
-
VALUE
|
10
|
+
void define_ruby_types();
|
11
|
+
VALUE get_ruby_module();
|
10
12
|
|
11
|
-
static
|
12
|
-
static void rb_free(cv::BackgroundSubtractorMOG2 *bg);
|
13
|
+
static void rb_free(cv::BackgroundSubtractor *bg);
|
13
14
|
static VALUE rb_initialize(int argc, VALUE *argv, VALUE self);
|
14
15
|
static VALUE rb_subtract(int argc, VALUE *argv, VALUE self);
|
16
|
+
|
17
|
+
// Class allocators
|
18
|
+
static VALUE rb_mog_alloc(VALUE self);
|
19
|
+
static VALUE rb_mog2_alloc(VALUE self);
|
20
|
+
static VALUE rb_gmg_alloc(VALUE self);
|
21
|
+
static VALUE rb_prati_mediod_alloc(VALUE self);
|
15
22
|
}
|
16
23
|
}
|
17
24
|
|
@@ -0,0 +1,67 @@
|
|
1
|
+
/*
|
2
|
+
This file is part of BGSLibrary.
|
3
|
+
|
4
|
+
BGSLibrary is free software: you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU General Public License as published by
|
6
|
+
the Free Software Foundation, either version 3 of the License, or
|
7
|
+
(at your option) any later version.
|
8
|
+
|
9
|
+
BGSLibrary is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU General Public License
|
15
|
+
along with BGSLibrary. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
*/
|
17
|
+
/****************************************************************************
|
18
|
+
*
|
19
|
+
* Bgs.hpp
|
20
|
+
*
|
21
|
+
* Purpose: Base class for BGS algorithms.
|
22
|
+
*
|
23
|
+
* Author: Donovan Parks, October 2007
|
24
|
+
*
|
25
|
+
******************************************************************************/
|
26
|
+
|
27
|
+
#ifndef BGS_H_
|
28
|
+
#define BGS_H_
|
29
|
+
|
30
|
+
#include "bgslib_image.h"
|
31
|
+
#include "bgslib_bgs_params.h"
|
32
|
+
|
33
|
+
namespace Algorithms
|
34
|
+
{
|
35
|
+
namespace BackgroundSubtraction
|
36
|
+
{
|
37
|
+
class Bgs
|
38
|
+
{
|
39
|
+
public:
|
40
|
+
static const int BACKGROUND = 0;
|
41
|
+
static const int FOREGROUND = 255;
|
42
|
+
|
43
|
+
virtual ~Bgs() {}
|
44
|
+
|
45
|
+
// Initialize any data required by the BGS algorithm. Should be called once before calling
|
46
|
+
// any of the following functions.
|
47
|
+
virtual void Initalize(const BgsParams& param) = 0;
|
48
|
+
|
49
|
+
// Initialize the background model. Typically, the background model is initialized using the first
|
50
|
+
// frame of the incoming video stream, but alternatives are possible.
|
51
|
+
virtual void InitModel(const RgbImage& data) = 0;
|
52
|
+
|
53
|
+
// Subtract the current frame from the background model and produce a binary foreground mask using
|
54
|
+
// both a low and high threshold value.
|
55
|
+
virtual void Subtract(int frame_num, const RgbImage& data,
|
56
|
+
BwImage& low_threshold_mask, BwImage& high_threshold_mask) = 0;
|
57
|
+
|
58
|
+
// Update the background model. Only pixels set to background in update_mask are updated.
|
59
|
+
virtual void Update(int frame_num, const RgbImage& data, const BwImage& update_mask) = 0;
|
60
|
+
|
61
|
+
// Return the current background model.
|
62
|
+
virtual RgbImage *Background() = 0;
|
63
|
+
};
|
64
|
+
};
|
65
|
+
};
|
66
|
+
|
67
|
+
#endif
|
@@ -0,0 +1,60 @@
|
|
1
|
+
/*
|
2
|
+
This file is part of BGSLibrary.
|
3
|
+
|
4
|
+
BGSLibrary is free software: you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU General Public License as published by
|
6
|
+
the Free Software Foundation, either version 3 of the License, or
|
7
|
+
(at your option) any later version.
|
8
|
+
|
9
|
+
BGSLibrary is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU General Public License
|
15
|
+
along with BGSLibrary. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
*/
|
17
|
+
/****************************************************************************
|
18
|
+
*
|
19
|
+
* BgsParams.hpp
|
20
|
+
*
|
21
|
+
* Purpose: Base class for BGS parameters. Any parameters common to all BGS
|
22
|
+
* algorithms should be specified directly in this class.
|
23
|
+
*
|
24
|
+
* Author: Donovan Parks, May 2008
|
25
|
+
*
|
26
|
+
******************************************************************************/
|
27
|
+
|
28
|
+
#ifndef BGS_PARAMS_H_
|
29
|
+
#define BGS_PARAMS_H_
|
30
|
+
|
31
|
+
namespace Algorithms
|
32
|
+
{
|
33
|
+
namespace BackgroundSubtraction
|
34
|
+
{
|
35
|
+
class BgsParams
|
36
|
+
{
|
37
|
+
public:
|
38
|
+
virtual ~BgsParams() {}
|
39
|
+
|
40
|
+
virtual void SetFrameSize(unsigned int width, unsigned int height)
|
41
|
+
{
|
42
|
+
m_width = width;
|
43
|
+
m_height = height;
|
44
|
+
m_size = width*height;
|
45
|
+
}
|
46
|
+
|
47
|
+
unsigned int &Width() { return m_width; }
|
48
|
+
unsigned int &Height() { return m_height; }
|
49
|
+
unsigned int &Size() { return m_size; }
|
50
|
+
|
51
|
+
protected:
|
52
|
+
unsigned int m_width;
|
53
|
+
unsigned int m_height;
|
54
|
+
unsigned int m_size;
|
55
|
+
};
|
56
|
+
};
|
57
|
+
};
|
58
|
+
|
59
|
+
#endif
|
60
|
+
|
@@ -0,0 +1,79 @@
|
|
1
|
+
/*
|
2
|
+
This file is part of BGSLibrary.
|
3
|
+
|
4
|
+
BGSLibrary is free software: you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU General Public License as published by
|
6
|
+
the Free Software Foundation, either version 3 of the License, or
|
7
|
+
(at your option) any later version.
|
8
|
+
|
9
|
+
BGSLibrary is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU General Public License
|
15
|
+
along with BGSLibrary. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
*/
|
17
|
+
#include "bgslib_dp_prati_mediod_bgs.h"
|
18
|
+
|
19
|
+
DPPratiMediodBGS::DPPratiMediodBGS() :
|
20
|
+
firstTime(true), frameNumber(0), threshold(30), samplingRate(5), historySize(16), weight(5), showOutput(false)
|
21
|
+
{}
|
22
|
+
|
23
|
+
DPPratiMediodBGS::~DPPratiMediodBGS() {}
|
24
|
+
|
25
|
+
void DPPratiMediodBGS::operator()(cv::InputArray _image, cv::OutputArray _fgmask, double learningRate)
|
26
|
+
{
|
27
|
+
cv::Mat img_input = _image.getMat();
|
28
|
+
if(img_input.empty())
|
29
|
+
return;
|
30
|
+
|
31
|
+
frame = new IplImage(img_input);
|
32
|
+
|
33
|
+
if(firstTime)
|
34
|
+
frame_data.ReleaseMemory(false);
|
35
|
+
frame_data = frame;
|
36
|
+
|
37
|
+
if(firstTime)
|
38
|
+
{
|
39
|
+
int width = img_input.size().width;
|
40
|
+
int height = img_input.size().height;
|
41
|
+
|
42
|
+
lowThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
|
43
|
+
lowThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
|
44
|
+
|
45
|
+
highThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
|
46
|
+
highThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
|
47
|
+
|
48
|
+
params.SetFrameSize(width, height);
|
49
|
+
params.LowThreshold() = threshold;
|
50
|
+
params.HighThreshold() = 2*params.LowThreshold(); // Note: high threshold is used by post-processing
|
51
|
+
params.SamplingRate() = samplingRate;
|
52
|
+
params.HistorySize() = historySize;
|
53
|
+
params.Weight() = weight;
|
54
|
+
|
55
|
+
bgs.Initalize(params);
|
56
|
+
bgs.InitModel(frame_data);
|
57
|
+
}
|
58
|
+
|
59
|
+
bgs.Subtract(frameNumber, frame_data, lowThresholdMask, highThresholdMask);
|
60
|
+
lowThresholdMask.Clear();
|
61
|
+
bgs.Update(frameNumber, frame_data, lowThresholdMask);
|
62
|
+
|
63
|
+
cv::Mat foreground(highThresholdMask.Ptr());
|
64
|
+
|
65
|
+
if(showOutput)
|
66
|
+
cv::imshow("Temporal Median (Cucchiara&Calderara)", foreground);
|
67
|
+
|
68
|
+
foreground.copyTo(_fgmask);
|
69
|
+
|
70
|
+
delete frame;
|
71
|
+
firstTime = false;
|
72
|
+
frameNumber++;
|
73
|
+
}
|
74
|
+
|
75
|
+
CV_INIT_ALGORITHM(DPPratiMediodBGS, "BGSLibrary.DPPratiMediod",
|
76
|
+
obj.info()->addParam(obj, "threshold", obj.threshold);
|
77
|
+
obj.info()->addParam(obj, "samplingRate", obj.samplingRate);
|
78
|
+
obj.info()->addParam(obj, "historySize", obj.historySize);
|
79
|
+
obj.info()->addParam(obj, "showOutput", obj.showOutput));
|
@@ -0,0 +1,53 @@
|
|
1
|
+
/*
|
2
|
+
This file is part of BGSLibrary.
|
3
|
+
|
4
|
+
BGSLibrary is free software: you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU General Public License as published by
|
6
|
+
the Free Software Foundation, either version 3 of the License, or
|
7
|
+
(at your option) any later version.
|
8
|
+
|
9
|
+
BGSLibrary is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU General Public License
|
15
|
+
along with BGSLibrary. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
*/
|
17
|
+
#pragma once
|
18
|
+
|
19
|
+
#include <iostream>
|
20
|
+
#include <opencv2/opencv.hpp>
|
21
|
+
#include <opencv2/core/internal.hpp>
|
22
|
+
|
23
|
+
#include "bgslib_prati_mediod_bgs.h"
|
24
|
+
|
25
|
+
using namespace Algorithms::BackgroundSubtraction;
|
26
|
+
|
27
|
+
class DPPratiMediodBGS : public cv::BackgroundSubtractor
|
28
|
+
{
|
29
|
+
private:
|
30
|
+
bool firstTime;
|
31
|
+
long frameNumber;
|
32
|
+
IplImage* frame;
|
33
|
+
RgbImage frame_data;
|
34
|
+
|
35
|
+
PratiParams params;
|
36
|
+
PratiMediodBGS bgs;
|
37
|
+
BwImage lowThresholdMask;
|
38
|
+
BwImage highThresholdMask;
|
39
|
+
|
40
|
+
int threshold;
|
41
|
+
int samplingRate;
|
42
|
+
int historySize;
|
43
|
+
int weight;
|
44
|
+
bool showOutput;
|
45
|
+
|
46
|
+
public:
|
47
|
+
DPPratiMediodBGS();
|
48
|
+
~DPPratiMediodBGS();
|
49
|
+
|
50
|
+
virtual cv::AlgorithmInfo* info() const;
|
51
|
+
void operator()(cv::InputArray _image, cv::OutputArray _fgmask, double learningRate);
|
52
|
+
};
|
53
|
+
|