From: Elena Gvozdeva Date: Wed, 29 Jan 2014 10:10:36 +0000 (+0400) Subject: fixed X-Git-Tag: accepted/tizen/6.0/unified/20201030.111113~3507^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=96b6f338e14eb7dcf4ef5a06b203ca9b3fe32ec9;p=platform%2Fupstream%2Fopencv.git fixed --- diff --git a/modules/video/perf/opencl/perf_bgfg_mog2.cpp b/modules/video/perf/opencl/perf_bgfg_mog2.cpp index b746437..50814bf 100644 --- a/modules/video/perf/opencl/perf_bgfg_mog2.cpp +++ b/modules/video/perf/opencl/perf_bgfg_mog2.cpp @@ -23,6 +23,7 @@ namespace ocl { //////////////////////////// Mog2////////////////////////// typedef tuple VideoMOG2ParamType; +typedef TestBaseWithParam MOG2_Apply; typedef TestBaseWithParam MOG2_GetBackgroundImage; static void cvtFrameFmt(vector& input, vector& output) @@ -51,7 +52,37 @@ static void prepareData(VideoCapture& cap, int cn, vector& frame_buffer) 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 frame_buffer(nFrame); + + cv::VideoCapture cap(inputFile); + ASSERT_TRUE(cap.isOpened()); + prepareData(cap, cn, frame_buffer); + + UMat u_foreground; + + OCL_TEST_CYCLE() + { + Ptr 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(); diff --git a/modules/video/src/bgfg_gaussmix2.cpp b/modules/video/src/bgfg_gaussmix2.cpp index 947f720..8650de9 100644 --- a/modules/video/src/bgfg_gaussmix2.cpp +++ b/modules/video/src/bgfg_gaussmix2.cpp @@ -736,6 +736,8 @@ public: uchar shadowVal; }; +#ifdef HAVE_OPENCL + bool BackgroundSubtractorMOG2Impl::ocl_apply(InputArray _image, OutputArray _fgmask, double learningRate) { ++nframes; @@ -791,6 +793,27 @@ bool BackgroundSubtractorMOG2Impl::ocl_apply(InputArray _image, OutputArray _fgm 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) { 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 (ocl_apply(_image, _fgmask, learningRate)) - return; - else - initialize(_image.size(), _image.type()); + CV_OCL_RUN(opencl_ON, ocl_apply(_image, _fgmask, learningRate)) + + opencl_ON = false; + initialize(_image.size(), _image.type()); } - opencl_ON = false; Mat image = _image.getMat(); _fgmask.create( image.size(), CV_8U ); @@ -827,31 +849,11 @@ void BackgroundSubtractorMOG2Impl::apply(InputArray _image, OutputArray _fgmask, 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 { if (opencl_ON) { - if (ocl_getBackgroundImage(backgroundImage)) - return; + CV_OCL_RUN(opencl_ON, ocl_getBackgroundImage(backgroundImage)) opencl_ON = false; return;