120 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include "perf_precomp.hpp"
 | 
						|
#include "opencv2/ts/ocl_perf.hpp"
 | 
						|
 | 
						|
#ifdef HAVE_OPENCL
 | 
						|
 | 
						|
#if defined(HAVE_XINE)     || \
 | 
						|
defined(HAVE_GSTREAMER)    || \
 | 
						|
defined(HAVE_QUICKTIME)    || \
 | 
						|
defined(HAVE_AVFOUNDATION) || \
 | 
						|
defined(HAVE_FFMPEG)       || \
 | 
						|
defined(WIN32)
 | 
						|
 | 
						|
#  define BUILD_WITH_VIDEO_INPUT_SUPPORT 1
 | 
						|
#else
 | 
						|
#  define BUILD_WITH_VIDEO_INPUT_SUPPORT 0
 | 
						|
#endif
 | 
						|
 | 
						|
#if BUILD_WITH_VIDEO_INPUT_SUPPORT
 | 
						|
 | 
						|
namespace cvtest {
 | 
						|
namespace ocl {
 | 
						|
 | 
						|
//////////////////////////// Mog2//////////////////////////
 | 
						|
 | 
						|
typedef tuple<string, int> VideoMOG2ParamType;
 | 
						|
typedef TestBaseWithParam<VideoMOG2ParamType> MOG2_Apply;
 | 
						|
typedef TestBaseWithParam<VideoMOG2ParamType> MOG2_GetBackgroundImage;
 | 
						|
 | 
						|
static void cvtFrameFmt(vector<Mat>& input, vector<Mat>& output)
 | 
						|
{
 | 
						|
    for(int i = 0; i< (int)(input.size()); i++)
 | 
						|
    {
 | 
						|
        cvtColor(input[i], output[i], COLOR_RGB2GRAY);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
static void prepareData(VideoCapture& cap, int cn, vector<Mat>& frame_buffer)
 | 
						|
{
 | 
						|
    cv::Mat frame;
 | 
						|
    std::vector<Mat> frame_buffer_init;
 | 
						|
    int nFrame = (int)frame_buffer.size();
 | 
						|
    for(int i = 0; i < nFrame; i++)
 | 
						|
    {
 | 
						|
        cap >> frame;
 | 
						|
        ASSERT_FALSE(frame.empty());
 | 
						|
        frame_buffer_init.push_back(frame);
 | 
						|
    }
 | 
						|
 | 
						|
    if(cn == 1)
 | 
						|
        cvtFrameFmt(frame_buffer_init, frame_buffer);
 | 
						|
    else
 | 
						|
        frame_buffer = frame_buffer_init;
 | 
						|
}
 | 
						|
 | 
						|
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();
 | 
						|
 | 
						|
    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, u_background;
 | 
						|
 | 
						|
    OCL_TEST_CYCLE()
 | 
						|
    {
 | 
						|
        Ptr<cv::BackgroundSubtractorMOG2> mog2 = createBackgroundSubtractorMOG2();
 | 
						|
        mog2->setDetectShadows(false);
 | 
						|
        u_foreground.release();
 | 
						|
        u_background.release();
 | 
						|
        for (int i = 0; i < nFrame; i++)
 | 
						|
        {
 | 
						|
            mog2->apply(frame_buffer[i], u_foreground);
 | 
						|
        }
 | 
						|
        mog2->getBackgroundImage(u_background);
 | 
						|
    }
 | 
						|
    SANITY_CHECK(u_background);
 | 
						|
}
 | 
						|
 | 
						|
}}// namespace cvtest::ocl
 | 
						|
 | 
						|
    #endif
 | 
						|
#endif |