fixed
This commit is contained in:
parent
17c6b4d306
commit
96b6f338e1
@ -23,6 +23,7 @@ namespace ocl {
|
|||||||
//////////////////////////// Mog2//////////////////////////
|
//////////////////////////// Mog2//////////////////////////
|
||||||
|
|
||||||
typedef tuple<string, int> VideoMOG2ParamType;
|
typedef tuple<string, int> VideoMOG2ParamType;
|
||||||
|
typedef TestBaseWithParam<VideoMOG2ParamType> MOG2_Apply;
|
||||||
typedef TestBaseWithParam<VideoMOG2ParamType> MOG2_GetBackgroundImage;
|
typedef TestBaseWithParam<VideoMOG2ParamType> MOG2_GetBackgroundImage;
|
||||||
|
|
||||||
static void cvtFrameFmt(vector<Mat>& input, vector<Mat>& output)
|
static void cvtFrameFmt(vector<Mat>& input, vector<Mat>& output)
|
||||||
@ -51,7 +52,37 @@ static void prepareData(VideoCapture& cap, int cn, vector<Mat>& frame_buffer)
|
|||||||
frame_buffer = frame_buffer_init;
|
frame_buffer = frame_buffer_init;
|
||||||
}
|
}
|
||||||
|
|
||||||
OCL_PERF_TEST_P(MOG2_GetBackgroundImage, Mog2, Combine(Values("gpu/video/768x576.avi", "gpu/video/1920x1080.avi"), Values(1,3)))
|
OCL_PERF_TEST_P(MOG2_Apply, Mog2, Combine(Values("gpu/video/768x576.avi", "gpu/video/1920x1080.avi"), Values(1,3)))
|
||||||
|
{
|
||||||
|
VideoMOG2ParamType params = GetParam();
|
||||||
|
|
||||||
|
const string inputFile = getDataPath(get<0>(params));
|
||||||
|
|
||||||
|
const int cn = get<1>(params);
|
||||||
|
int nFrame = 5;
|
||||||
|
|
||||||
|
vector<Mat> frame_buffer(nFrame);
|
||||||
|
|
||||||
|
cv::VideoCapture cap(inputFile);
|
||||||
|
ASSERT_TRUE(cap.isOpened());
|
||||||
|
prepareData(cap, cn, frame_buffer);
|
||||||
|
|
||||||
|
UMat u_foreground;
|
||||||
|
|
||||||
|
OCL_TEST_CYCLE()
|
||||||
|
{
|
||||||
|
Ptr<cv::BackgroundSubtractorMOG2> mog2 = createBackgroundSubtractorMOG2();
|
||||||
|
mog2->setDetectShadows(false);
|
||||||
|
u_foreground.release();
|
||||||
|
for (int i = 0; i < nFrame; i++)
|
||||||
|
{
|
||||||
|
mog2->apply(frame_buffer[i], u_foreground);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SANITY_CHECK(u_foreground);
|
||||||
|
}
|
||||||
|
|
||||||
|
OCL_PERF_TEST_P(MOG2_GetBackgroundImage, Mog2, Combine(Values("gpu/video/768x576.avi", "gpu/video/1920x1080.avi"), Values(3)))
|
||||||
{
|
{
|
||||||
VideoMOG2ParamType params = GetParam();
|
VideoMOG2ParamType params = GetParam();
|
||||||
|
|
||||||
|
@ -736,6 +736,8 @@ public:
|
|||||||
uchar shadowVal;
|
uchar shadowVal;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef HAVE_OPENCL
|
||||||
|
|
||||||
bool BackgroundSubtractorMOG2Impl::ocl_apply(InputArray _image, OutputArray _fgmask, double learningRate)
|
bool BackgroundSubtractorMOG2Impl::ocl_apply(InputArray _image, OutputArray _fgmask, double learningRate)
|
||||||
{
|
{
|
||||||
++nframes;
|
++nframes;
|
||||||
@ -791,6 +793,27 @@ bool BackgroundSubtractorMOG2Impl::ocl_apply(InputArray _image, OutputArray _fgm
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool BackgroundSubtractorMOG2Impl::ocl_getBackgroundImage(OutputArray _backgroundImage) const
|
||||||
|
{
|
||||||
|
CV_Assert(frameType == CV_8UC1 || frameType == CV_8UC3);
|
||||||
|
|
||||||
|
_backgroundImage.create(frameSize, frameType);
|
||||||
|
UMat dst = _backgroundImage.getUMat();
|
||||||
|
|
||||||
|
int idxArg = 0;
|
||||||
|
idxArg = kernel_getBg.set(idxArg, ocl::KernelArg::ReadOnly(u_bgmodelUsedModes));
|
||||||
|
idxArg = kernel_getBg.set(idxArg, ocl::KernelArg::ReadOnlyNoSize(u_weight));
|
||||||
|
idxArg = kernel_getBg.set(idxArg, ocl::KernelArg::ReadOnlyNoSize(u_mean));
|
||||||
|
idxArg = kernel_getBg.set(idxArg, ocl::KernelArg::WriteOnlyNoSize(dst));
|
||||||
|
idxArg = kernel_getBg.set(idxArg, backgroundRatio);
|
||||||
|
|
||||||
|
size_t globalsize[2] = {u_bgmodelUsedModes.cols, u_bgmodelUsedModes.rows};
|
||||||
|
|
||||||
|
return kernel_getBg.run(2, globalsize, NULL, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
void BackgroundSubtractorMOG2Impl::apply(InputArray _image, OutputArray _fgmask, double learningRate)
|
void BackgroundSubtractorMOG2Impl::apply(InputArray _image, OutputArray _fgmask, double learningRate)
|
||||||
{
|
{
|
||||||
bool needToInitialize = nframes == 0 || learningRate >= 1 || _image.size() != frameSize || _image.type() != frameType;
|
bool needToInitialize = nframes == 0 || learningRate >= 1 || _image.size() != frameSize || _image.type() != frameType;
|
||||||
@ -800,12 +823,11 @@ void BackgroundSubtractorMOG2Impl::apply(InputArray _image, OutputArray _fgmask,
|
|||||||
|
|
||||||
if (opencl_ON)
|
if (opencl_ON)
|
||||||
{
|
{
|
||||||
if (ocl_apply(_image, _fgmask, learningRate))
|
CV_OCL_RUN(opencl_ON, ocl_apply(_image, _fgmask, learningRate))
|
||||||
return;
|
|
||||||
else
|
opencl_ON = false;
|
||||||
initialize(_image.size(), _image.type());
|
initialize(_image.size(), _image.type());
|
||||||
}
|
}
|
||||||
opencl_ON = false;
|
|
||||||
|
|
||||||
Mat image = _image.getMat();
|
Mat image = _image.getMat();
|
||||||
_fgmask.create( image.size(), CV_8U );
|
_fgmask.create( image.size(), CV_8U );
|
||||||
@ -827,31 +849,11 @@ void BackgroundSubtractorMOG2Impl::apply(InputArray _image, OutputArray _fgmask,
|
|||||||
image.total()/(double)(1 << 16));
|
image.total()/(double)(1 << 16));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BackgroundSubtractorMOG2Impl::ocl_getBackgroundImage(OutputArray _backgroundImage) const
|
|
||||||
{
|
|
||||||
CV_Assert(frameType == CV_8UC1 || frameType == CV_8UC3);
|
|
||||||
|
|
||||||
_backgroundImage.create(frameSize, frameType);
|
|
||||||
UMat dst = _backgroundImage.getUMat();
|
|
||||||
|
|
||||||
int idxArg = 0;
|
|
||||||
idxArg = kernel_getBg.set(idxArg, ocl::KernelArg::ReadOnly(u_bgmodelUsedModes));
|
|
||||||
idxArg = kernel_getBg.set(idxArg, ocl::KernelArg::ReadOnlyNoSize(u_weight));
|
|
||||||
idxArg = kernel_getBg.set(idxArg, ocl::KernelArg::ReadOnlyNoSize(u_mean));
|
|
||||||
idxArg = kernel_getBg.set(idxArg, ocl::KernelArg::WriteOnlyNoSize(dst));
|
|
||||||
idxArg = kernel_getBg.set(idxArg, backgroundRatio);
|
|
||||||
|
|
||||||
size_t globalsize[2] = {u_bgmodelUsedModes.cols, u_bgmodelUsedModes.rows};
|
|
||||||
|
|
||||||
return kernel_getBg.run(2, globalsize, NULL, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void BackgroundSubtractorMOG2Impl::getBackgroundImage(OutputArray backgroundImage) const
|
void BackgroundSubtractorMOG2Impl::getBackgroundImage(OutputArray backgroundImage) const
|
||||||
{
|
{
|
||||||
if (opencl_ON)
|
if (opencl_ON)
|
||||||
{
|
{
|
||||||
if (ocl_getBackgroundImage(backgroundImage))
|
CV_OCL_RUN(opencl_ON, ocl_getBackgroundImage(backgroundImage))
|
||||||
return;
|
|
||||||
|
|
||||||
opencl_ON = false;
|
opencl_ON = false;
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user