mirror of
https://github.com/opencv/opencv_contrib.git
synced 2025-10-19 19:44:14 +08:00
NVIDIA_OPTICAL_FLOW_2_0_INTEGRATION
This commit is contained in:

committed by
Vishal Bhaskar Chiluka

parent
0b6b8ff9dd
commit
582fe44b7a
@@ -495,19 +495,11 @@ CUDA_TEST_P(NvidiaOpticalFlow_1_0, Regression)
|
||||
cv::Mat frame1 = readImage("opticalflow/frame1.png", cv::IMREAD_GRAYSCALE);
|
||||
ASSERT_FALSE(frame1.empty());
|
||||
|
||||
const int width = frame0.size().width;
|
||||
const int height = frame0.size().height;
|
||||
const bool enableTemporalHints = false;
|
||||
const bool enableExternalHints = false;
|
||||
const bool enableCostBuffer = false;
|
||||
const int gpuid = 0;
|
||||
|
||||
cv::Ptr<cv::cuda::NvidiaOpticalFlow_1_0> d_nvof;
|
||||
try
|
||||
{
|
||||
d_nvof = cv::cuda::NvidiaOpticalFlow_1_0::create(width, height,
|
||||
cv::cuda::NvidiaOpticalFlow_1_0::NVIDIA_OF_PERF_LEVEL::NV_OF_PERF_LEVEL_SLOW,
|
||||
enableTemporalHints, enableExternalHints, enableCostBuffer, gpuid);
|
||||
d_nvof = cv::cuda::NvidiaOpticalFlow_1_0::create(frame0.size(),
|
||||
cv::cuda::NvidiaOpticalFlow_1_0::NVIDIA_OF_PERF_LEVEL::NV_OF_PERF_LEVEL_SLOW);
|
||||
}
|
||||
catch (const cv::Exception& e)
|
||||
{
|
||||
@@ -519,7 +511,7 @@ CUDA_TEST_P(NvidiaOpticalFlow_1_0, Regression)
|
||||
|
||||
Mat flow, upsampledFlow;
|
||||
d_nvof->calc(loadMat(frame0), loadMat(frame1), flow);
|
||||
d_nvof->upSampler(flow, width, height, gridSize, upsampledFlow);
|
||||
d_nvof->upSampler(flow, frame0.size(), gridSize, upsampledFlow);
|
||||
|
||||
std::string fname(cvtest::TS::ptr()->get_data_path());
|
||||
fname += "opticalflow/nvofGolden.flo";
|
||||
@@ -527,6 +519,7 @@ CUDA_TEST_P(NvidiaOpticalFlow_1_0, Regression)
|
||||
ASSERT_FALSE(golden.empty());
|
||||
|
||||
EXPECT_MAT_SIMILAR(golden, upsampledFlow, 1e-10);
|
||||
d_nvof->collectGarbage();
|
||||
}
|
||||
|
||||
CUDA_TEST_P(NvidiaOpticalFlow_1_0, OpticalFlowNan)
|
||||
@@ -539,19 +532,11 @@ CUDA_TEST_P(NvidiaOpticalFlow_1_0, OpticalFlowNan)
|
||||
|
||||
cv::Mat r_frame0, r_frame1;
|
||||
|
||||
const int width = frame0.size().width;
|
||||
const int height = frame0.size().height;
|
||||
const bool enableTemporalHints = false;
|
||||
const bool enableExternalHints = false;
|
||||
const bool enableCostBuffer = false;
|
||||
const int gpuid = 0;
|
||||
|
||||
cv::Ptr<cv::cuda::NvidiaOpticalFlow_1_0> d_nvof;
|
||||
try
|
||||
{
|
||||
d_nvof = cv::cuda::NvidiaOpticalFlow_1_0::create(width, height,
|
||||
cv::cuda::NvidiaOpticalFlow_1_0::NVIDIA_OF_PERF_LEVEL::NV_OF_PERF_LEVEL_SLOW,
|
||||
enableTemporalHints, enableExternalHints, enableCostBuffer, gpuid);
|
||||
d_nvof = cv::cuda::NvidiaOpticalFlow_1_0::create(frame0.size(),
|
||||
cv::cuda::NvidiaOpticalFlow_1_0::NVIDIA_OF_PERF_LEVEL::NV_OF_PERF_LEVEL_SLOW);
|
||||
}
|
||||
catch (const cv::Exception& e)
|
||||
{
|
||||
@@ -569,9 +554,96 @@ CUDA_TEST_P(NvidiaOpticalFlow_1_0, OpticalFlowNan)
|
||||
|
||||
EXPECT_TRUE(cv::checkRange(flowx));
|
||||
EXPECT_TRUE(cv::checkRange(flowy));
|
||||
d_nvof->collectGarbage();
|
||||
};
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(CUDA_OptFlow, NvidiaOpticalFlow_1_0, ALL_DEVICES);
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
// NvidiaOpticalFlow_2_0
|
||||
|
||||
struct NvidiaOpticalFlow_2_0 : testing::TestWithParam<cv::cuda::DeviceInfo>
|
||||
{
|
||||
cv::cuda::DeviceInfo devInfo;
|
||||
|
||||
virtual void SetUp()
|
||||
{
|
||||
devInfo = GetParam();
|
||||
|
||||
cv::cuda::setDevice(devInfo.deviceID());
|
||||
}
|
||||
};
|
||||
|
||||
CUDA_TEST_P(NvidiaOpticalFlow_2_0, Regression)
|
||||
{
|
||||
cv::Mat frame0 = readImage("opticalflow/frame0.png", cv::IMREAD_GRAYSCALE);
|
||||
ASSERT_FALSE(frame0.empty());
|
||||
|
||||
cv::Mat frame1 = readImage("opticalflow/frame1.png", cv::IMREAD_GRAYSCALE);
|
||||
ASSERT_FALSE(frame1.empty());
|
||||
|
||||
cv::Ptr<cv::cuda::NvidiaOpticalFlow_2_0> d_nvof;
|
||||
try
|
||||
{
|
||||
d_nvof = cv::cuda::NvidiaOpticalFlow_2_0::create(frame0.size(),
|
||||
cv::cuda::NvidiaOpticalFlow_2_0::NVIDIA_OF_PERF_LEVEL::NV_OF_PERF_LEVEL_SLOW);
|
||||
}
|
||||
catch (const cv::Exception& e)
|
||||
{
|
||||
if (e.code == Error::StsBadFunc || e.code == Error::StsBadArg || e.code == Error::StsNullPtr)
|
||||
throw SkipTestException("Current configuration is not supported");
|
||||
throw;
|
||||
}
|
||||
|
||||
Mat flow, upsampledFlow;
|
||||
d_nvof->calc(loadMat(frame0), loadMat(frame1), flow);
|
||||
d_nvof->convertToFloat(flow, upsampledFlow);
|
||||
|
||||
std::string fname(cvtest::TS::ptr()->get_data_path());
|
||||
fname += "opticalflow/nvofGolden_2.flo";
|
||||
cv::Mat golden = cv::readOpticalFlow(fname.c_str());
|
||||
ASSERT_FALSE(golden.empty());
|
||||
|
||||
EXPECT_MAT_SIMILAR(golden, upsampledFlow, 1e-10);
|
||||
d_nvof->collectGarbage();
|
||||
}
|
||||
|
||||
CUDA_TEST_P(NvidiaOpticalFlow_2_0, OpticalFlowNan)
|
||||
{
|
||||
cv::Mat frame0 = readImage("opticalflow/rubberwhale1.png", cv::IMREAD_GRAYSCALE);
|
||||
ASSERT_FALSE(frame0.empty());
|
||||
|
||||
cv::Mat frame1 = readImage("opticalflow/rubberwhale2.png", cv::IMREAD_GRAYSCALE);
|
||||
ASSERT_FALSE(frame1.empty());
|
||||
|
||||
cv::Mat r_frame0, r_frame1;
|
||||
|
||||
cv::Ptr<cv::cuda::NvidiaOpticalFlow_2_0> d_nvof;
|
||||
try
|
||||
{
|
||||
d_nvof = cv::cuda::NvidiaOpticalFlow_2_0::create(frame0.size(),
|
||||
cv::cuda::NvidiaOpticalFlow_2_0::NVIDIA_OF_PERF_LEVEL::NV_OF_PERF_LEVEL_SLOW);
|
||||
}
|
||||
catch (const cv::Exception& e)
|
||||
{
|
||||
if (e.code == Error::StsBadFunc || e.code == Error::StsBadArg || e.code == Error::StsNullPtr)
|
||||
throw SkipTestException("Current configuration is not supported");
|
||||
throw;
|
||||
}
|
||||
|
||||
Mat flow, flowx, flowy;
|
||||
d_nvof->calc(loadMat(frame0), loadMat(frame1), flow);
|
||||
|
||||
Mat planes[] = { flowx, flowy };
|
||||
split(flow, planes);
|
||||
flowx = planes[0]; flowy = planes[1];
|
||||
|
||||
EXPECT_TRUE(cv::checkRange(flowx));
|
||||
EXPECT_TRUE(cv::checkRange(flowy));
|
||||
d_nvof->collectGarbage();
|
||||
};
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(CUDA_OptFlow, NvidiaOpticalFlow_2_0, ALL_DEVICES);
|
||||
|
||||
}} // namespace
|
||||
#endif // HAVE_CUDA
|
||||
|
Reference in New Issue
Block a user