testing::Values(Channels(1), Channels(3), Channels(4))));\r
\r
//////////////////////////////////////////////////////\r
+// GMG\r
+\r
+IMPLEMENT_PARAM_CLASS(MaxFeatures, int)\r
+\r
+GPU_PERF_TEST(GMG, cv::gpu::DeviceInfo, std::string, Channels, MaxFeatures)\r
+{\r
+ cv::gpu::DeviceInfo devInfo = GET_PARAM(0);\r
+ cv::gpu::setDevice(devInfo.deviceID());\r
+ std::string inputFile = perf::TestBase::getDataPath(std::string("gpu/video/") + GET_PARAM(1));\r
+ int cn = GET_PARAM(2);\r
+ int maxFeatures = GET_PARAM(3);\r
+\r
+ cv::VideoCapture cap(inputFile);\r
+ ASSERT_TRUE(cap.isOpened());\r
+\r
+ cv::Mat frame;\r
+ cap >> frame;\r
+ ASSERT_FALSE(frame.empty());\r
+\r
+ if (cn != 3)\r
+ {\r
+ cv::Mat temp;\r
+ if (cn == 1)\r
+ cv::cvtColor(frame, temp, cv::COLOR_BGR2GRAY);\r
+ else\r
+ cv::cvtColor(frame, temp, cv::COLOR_BGR2BGRA);\r
+ cv::swap(temp, frame);\r
+ }\r
+\r
+ cv::gpu::GpuMat d_frame(frame);\r
+ cv::gpu::GpuMat d_fgmask;\r
+\r
+ cv::gpu::GMG_GPU gmg;\r
+ gmg.maxFeatures = maxFeatures;\r
+\r
+ gmg(d_frame, d_fgmask);\r
+\r
+ for (int i = 0; i < 150; ++i)\r
+ {\r
+ cap >> frame;\r
+ if (frame.empty())\r
+ {\r
+ cap.open(inputFile);\r
+ cap >> frame;\r
+ }\r
+\r
+ if (cn != 3)\r
+ {\r
+ cv::Mat temp;\r
+ if (cn == 1)\r
+ cv::cvtColor(frame, temp, cv::COLOR_BGR2GRAY);\r
+ else\r
+ cv::cvtColor(frame, temp, cv::COLOR_BGR2BGRA);\r
+ cv::swap(temp, frame);\r
+ }\r
+\r
+ d_frame.upload(frame);\r
+\r
+ startTimer(); next();\r
+ gmg(d_frame, d_fgmask);\r
+ stopTimer();\r
+ }\r
+}\r
+\r
+INSTANTIATE_TEST_CASE_P(Video, GMG, testing::Combine(\r
+ ALL_DEVICES,\r
+ testing::Values(std::string("768x576.avi"), std::string("1920x1080.avi")),\r
+ testing::Values(Channels(1), Channels(3), Channels(4)),\r
+ testing::Values(MaxFeatures(20), MaxFeatures(40), MaxFeatures(60))));\r
+\r
+//////////////////////////////////////////////////////\r
// VideoWriter\r
\r
#ifdef WIN32\r
testing::Values(/*Channels(1),*/ Channels(3)/*, Channels(4)*/)));\r
\r
//////////////////////////////////////////////////////\r
+// GMG\r
+\r
+IMPLEMENT_PARAM_CLASS(MaxFeatures, int)\r
+\r
+GPU_PERF_TEST(GMG, cv::gpu::DeviceInfo, std::string, Channels, MaxFeatures)\r
+{\r
+ std::string inputFile = perf::TestBase::getDataPath(std::string("gpu/video/") + GET_PARAM(1));\r
+ int cn = GET_PARAM(2);\r
+ int maxFeatures = GET_PARAM(3);\r
+\r
+ cv::VideoCapture cap(inputFile);\r
+ ASSERT_TRUE(cap.isOpened());\r
+\r
+ cv::Mat frame;\r
+ cap >> frame;\r
+ ASSERT_FALSE(frame.empty());\r
+\r
+ if (cn != 3)\r
+ {\r
+ cv::Mat temp;\r
+ if (cn == 1)\r
+ cv::cvtColor(frame, temp, cv::COLOR_BGR2GRAY);\r
+ else\r
+ cv::cvtColor(frame, temp, cv::COLOR_BGR2BGRA);\r
+ cv::swap(temp, frame);\r
+ }\r
+\r
+ cv::Mat fgmask;\r
+ cv::Mat zeros(frame.size(), CV_8UC1, cv::Scalar::all(0));\r
+\r
+ cv::BackgroundSubtractorGMG gmg;\r
+ gmg.set("maxFeatures", maxFeatures);\r
+ gmg.initializeType(frame, 0.0, 255.0);\r
+\r
+ gmg(frame, fgmask);\r
+ gmg.updateBackgroundModel(zeros);\r
+\r
+ for (int i = 0; i < 150; ++i)\r
+ {\r
+ cap >> frame;\r
+ if (frame.empty())\r
+ {\r
+ cap.open(inputFile);\r
+ cap >> frame;\r
+ }\r
+\r
+ if (cn != 3)\r
+ {\r
+ cv::Mat temp;\r
+ if (cn == 1)\r
+ cv::cvtColor(frame, temp, cv::COLOR_BGR2GRAY);\r
+ else\r
+ cv::cvtColor(frame, temp, cv::COLOR_BGR2BGRA);\r
+ cv::swap(temp, frame);\r
+ }\r
+\r
+ startTimer(); next();\r
+ gmg(frame, fgmask);\r
+ gmg.updateBackgroundModel(zeros);\r
+ stopTimer();\r
+ }\r
+}\r
+\r
+INSTANTIATE_TEST_CASE_P(Video, GMG, testing::Combine(\r
+ ALL_DEVICES,\r
+ testing::Values(std::string("768x576.avi"), std::string("1920x1080.avi")),\r
+ testing::Values(Channels(1), Channels(3), Channels(4)),\r
+ testing::Values(MaxFeatures(20), MaxFeatures(40), MaxFeatures(60))));\r
+\r
+//////////////////////////////////////////////////////\r
// VideoWriter\r
\r
#ifdef WIN32\r