void OpticalFlow::calculate(cv::gpu::GpuMat &in__currentFrame, cv::gpu::GpuMat &in__previousFrame, cv::gpu::GpuMat &out__opticalFlowX, cv::gpu::GpuMat &out__opticalFlowY) { const int64 start = cv::getTickCount(); brox(in__previousFrame, in__currentFrame, out__opticalFlowX, out__opticalFlowY); const double timeSec = (cv::getTickCount() - start) / cv::getTickFrequency(); std::cout << "Opt flow : \t" << timeSec << " sec" << std::endl; }
TEST_P(BroxOpticalFlow, Regression) { cv::Mat frame0 = readImageType("opticalflow/frame0.png", CV_32FC1); ASSERT_FALSE(frame0.empty()); cv::Mat frame1 = readImageType("opticalflow/frame1.png", CV_32FC1); ASSERT_FALSE(frame1.empty()); cv::gpu::BroxOpticalFlow brox(0.197f /*alpha*/, 50.0f /*gamma*/, 0.8f /*scale_factor*/, 10 /*inner_iterations*/, 77 /*outer_iterations*/, 10 /*solver_iterations*/); cv::gpu::GpuMat u; cv::gpu::GpuMat v; brox(loadMat(frame0), loadMat(frame1), u, v); #ifndef DUMP std::string fname(cvtest::TS::ptr()->get_data_path()); if (devInfo.majorVersion() >= 2) fname += BROX_OPTICAL_FLOW_DUMP_FILE_CC20; else fname += BROX_OPTICAL_FLOW_DUMP_FILE; std::ifstream f(fname.c_str(), std::ios_base::binary); int rows, cols; f.read((char*)&rows, sizeof(rows)); f.read((char*)&cols, sizeof(cols)); cv::Mat u_gold(rows, cols, CV_32FC1); for (int i = 0; i < u_gold.rows; ++i) f.read(u_gold.ptr<char>(i), u_gold.cols * sizeof(float)); cv::Mat v_gold(rows, cols, CV_32FC1); for (int i = 0; i < v_gold.rows; ++i) f.read(v_gold.ptr<char>(i), v_gold.cols * sizeof(float)); EXPECT_MAT_NEAR(u_gold, u, 0); EXPECT_MAT_NEAR(v_gold, v, 0); #else std::string fname(cvtest::TS::ptr()->get_data_path()); if (devInfo.majorVersion() >= 2) fname += BROX_OPTICAL_FLOW_DUMP_FILE_CC20; else fname += BROX_OPTICAL_FLOW_DUMP_FILE; std::ofstream f(fname.c_str(), std::ios_base::binary); f.write((char*)&u.rows, sizeof(u.rows)); f.write((char*)&u.cols, sizeof(u.cols)); cv::Mat h_u(u); cv::Mat h_v(v); for (int i = 0; i < u.rows; ++i) f.write(h_u.ptr<char>(i), u.cols * sizeof(float)); for (int i = 0; i < v.rows; ++i) f.write(h_v.ptr<char>(i), v.cols * sizeof(float)); #endif }