Skip to content

Commit a3d235c

Browse files
committed
Cuda and Legacy Apply Patch
1 parent 7deee2b commit a3d235c

File tree

6 files changed

+75
-0
lines changed

6 files changed

+75
-0
lines changed

modules/cudabgsegm/include/opencv2/cudabgsegm.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ class CV_EXPORTS_W BackgroundSubtractorMOG : public cv::BackgroundSubtractor
8484
using cv::BackgroundSubtractor::apply;
8585
CV_WRAP virtual void apply(InputArray image, OutputArray fgmask, double learningRate, Stream& stream) = 0;
8686

87+
CV_WRAP virtual void apply(InputArray image, InputArray knownForegroundMask, OutputArray fgmask, double learningRate, Stream& stream) = 0;
88+
8789
using cv::BackgroundSubtractor::getBackgroundImage;
8890
virtual void getBackgroundImage(OutputArray backgroundImage, Stream& stream) const = 0;
8991

@@ -135,6 +137,8 @@ class CV_EXPORTS_W BackgroundSubtractorMOG2 : public cv::BackgroundSubtractorMOG
135137

136138
CV_WRAP virtual void apply(InputArray image, OutputArray fgmask, double learningRate, Stream& stream) = 0;
137139

140+
CV_WRAP virtual void apply(InputArray image, InputArray knownForegroundMask, OutputArray fgmask, double learningRate, Stream& stream) = 0;
141+
138142
virtual void getBackgroundImage(OutputArray backgroundImage, Stream& stream) const = 0;
139143

140144
CV_WRAP inline void getBackgroundImage(CV_OUT GpuMat &backgroundImage, Stream& stream) {

modules/cudabgsegm/src/mog.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ namespace
7979
void apply(InputArray image, OutputArray fgmask, double learningRate=-1) CV_OVERRIDE;
8080
void apply(InputArray image, OutputArray fgmask, double learningRate, Stream& stream) CV_OVERRIDE;
8181

82+
void apply(InputArray image, InputArray knownForegroundMask, OutputArray fgmask, double learningRate=-1) CV_OVERRIDE;
83+
void apply(InputArray image, InputArray knownForegroundMask, OutputArray fgmask, double learningRate, Stream& stream) CV_OVERRIDE;
84+
8285
void getBackgroundImage(OutputArray backgroundImage) const CV_OVERRIDE;
8386
void getBackgroundImage(OutputArray backgroundImage, Stream& stream) const CV_OVERRIDE;
8487

@@ -131,6 +134,22 @@ namespace
131134
apply(image, fgmask, learningRate, Stream::Null());
132135
}
133136

137+
void MOGImpl::apply(InputArray _image, InputArray _knownForegroundMask, OutputArray _fgmask, double learningRate){
138+
if(!_knownForegroundMask.empty())
139+
{
140+
CV_Error( Error::StsNotImplemented, "Known Foreground Masking has not been implemented for this specific background subtractor, falling back to subtraction without known foreground");
141+
}
142+
apply(_image, _fgmask, learningRate, Stream::Null());
143+
}
144+
145+
void MOGImpl::apply(InputArray _image, InputArray _knownForegroundMask, OutputArray _fgmask, double learningRate, Stream &stream){
146+
if(!_knownForegroundMask.empty())
147+
{
148+
CV_Error( Error::StsNotImplemented, "Known Foreground Masking has not been implemented for this specific background subtractor, falling back to subtraction without known foreground");
149+
}
150+
apply(_image, _fgmask, learningRate, stream);
151+
}
152+
134153
void MOGImpl::apply(InputArray _frame, OutputArray _fgmask, double learningRate, Stream& stream)
135154
{
136155
using namespace cv::cuda::device::mog;

modules/cudabgsegm/src/mog2.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ class MOG2Impl CV_FINAL : public cuda::BackgroundSubtractorMOG2
8383
void apply(InputArray image, OutputArray fgmask, double learningRate = -1) CV_OVERRIDE;
8484
void apply(InputArray image, OutputArray fgmask, double learningRate, Stream &stream) CV_OVERRIDE;
8585

86+
void apply(InputArray image, InputArray knownForegroundMask, OutputArray fgmask, double learningRate = -1) CV_OVERRIDE;
87+
void apply(InputArray image, InputArray knownForegroundMask, OutputArray fgmask, double learningRate, Stream& stream) CV_OVERRIDE;
88+
8689
void getBackgroundImage(OutputArray backgroundImage) const CV_OVERRIDE;
8790
void getBackgroundImage(OutputArray backgroundImage, Stream &stream) const CV_OVERRIDE;
8891

@@ -174,6 +177,22 @@ void MOG2Impl::apply(InputArray image, OutputArray fgmask, double learningRate)
174177
apply(image, fgmask, learningRate, Stream::Null());
175178
}
176179

180+
void MOG2Impl::apply(InputArray _image, InputArray _knownForegroundMask, OutputArray _fgmask, double learningRate){
181+
if(!_knownForegroundMask.empty())
182+
{
183+
CV_Error( Error::StsNotImplemented, "Known Foreground Masking has not been implemented for this specific background subtractor, falling back to subtraction without known foreground");
184+
}
185+
apply(_image, _fgmask, learningRate, Stream::Null());
186+
}
187+
188+
void MOG2Impl::apply(InputArray _image, InputArray _knownForegroundMask, OutputArray _fgmask, double learningRate, Stream &stream){
189+
if(!_knownForegroundMask.empty())
190+
{
191+
CV_Error( Error::StsNotImplemented, "Known Foreground Masking has not been implemented for this specific background subtractor, falling back to subtraction without known foreground");
192+
}
193+
apply(_image, _fgmask, learningRate, stream);
194+
}
195+
177196
void MOG2Impl::apply(InputArray _frame, OutputArray _fgmask, double learningRate, Stream &stream)
178197
{
179198
using namespace cv::cuda::device::mog2;

modules/cudalegacy/include/opencv2/cudalegacy.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ class CV_EXPORTS BackgroundSubtractorGMG : public cv::BackgroundSubtractor
9292
public:
9393
using cv::BackgroundSubtractor::apply;
9494
virtual void apply(InputArray image, OutputArray fgmask, double learningRate, Stream& stream) = 0;
95+
virtual void apply(InputArray image, InputArray knownForegroundMask, OutputArray fgmask, double learningRate, Stream& stream) = 0;
9596

9697
virtual int getMaxFeatures() const = 0;
9798
virtual void setMaxFeatures(int maxFeatures) = 0;

modules/cudalegacy/src/fgd.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,7 @@ namespace
546546
~FGDImpl();
547547

548548
void apply(InputArray image, OutputArray fgmask, double learningRate=-1);
549+
void apply(InputArray image, InputArray knownForegroundMask, OutputArray fgmask, double learningRate=-1);
549550

550551
void getBackgroundImage(OutputArray backgroundImage) const;
551552

@@ -629,6 +630,15 @@ namespace
629630
foreground_.copyTo(fgmask);
630631
}
631632

633+
void FGDImpl::apply(InputArray _image, InputArray _knownForegroundMask, OutputArray _fgmask, double learningRate){
634+
Mat knownForegroundMask = _knownForegroundMask.getMat();
635+
if(!_knownForegroundMask.empty())
636+
{
637+
CV_Error( Error::StsNotImplemented, "Known Foreground Masking has not been implemented for this specific background subtractor, falling back to subtraction without known foreground");
638+
}
639+
apply(_image, _fgmask, learningRate);
640+
}
641+
632642
void FGDImpl::getBackgroundImage(OutputArray backgroundImage) const
633643
{
634644
cuda::cvtColor(background_, backgroundImage, COLOR_BGRA2BGR);

modules/cudalegacy/src/gmg.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ namespace
7373
void apply(InputArray image, OutputArray fgmask, double learningRate=-1);
7474
void apply(InputArray image, OutputArray fgmask, double learningRate, Stream& stream);
7575

76+
// Overloaded Background Subtractor Applys featuring knownForegroundMask parameter
77+
void apply(InputArray image, InputArray knownForegroundMask, OutputArray fgmask, double learningRate=-1);
78+
void apply(InputArray image, InputArray knownForegroundMask, OutputArray fgmask, double learningRate, Stream& stream);
79+
7680
void getBackgroundImage(OutputArray backgroundImage) const;
7781

7882
int getMaxFeatures() const { return maxFeatures_; }
@@ -165,6 +169,24 @@ namespace
165169
apply(image, fgmask, learningRate, Stream::Null());
166170
}
167171

172+
void GMGImpl::apply(InputArray _image, InputArray _knownForegroundMask, OutputArray _fgmask, double learningRate){
173+
Mat knownForegroundMask = _knownForegroundMask.getMat();
174+
if(!_knownForegroundMask.empty())
175+
{
176+
CV_Error( Error::StsNotImplemented, "Known Foreground Masking has not been implemented for this specific background subtractor, falling back to subtraction without known foreground");
177+
}
178+
apply(_image, _fgmask, Stream::Null());
179+
}
180+
181+
void GMGImpl::apply(InputArray _image, InputArray _knownForegroundMask, OutputArray _fgmask, double learningRate, Stream& stream){
182+
Mat knownForegroundMask = _knownForegroundMask.getMat();
183+
if(!_knownForegroundMask.empty())
184+
{
185+
CV_Error( Error::StsNotImplemented, "Known Foreground Masking has not been implemented for this specific background subtractor, falling back to subtraction without known foreground");
186+
}
187+
apply(_image, _fgmask, learningRate, stream);
188+
}
189+
168190
void GMGImpl::apply(InputArray _frame, OutputArray _fgmask, double newLearningRate, Stream& stream)
169191
{
170192
using namespace cv::cuda::device::gmg;

0 commit comments

Comments
 (0)