From 2e2b629153727e4128dacdf69fd5c6aa36adbb57 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 28 Sep 2017 21:39:22 +0300 Subject: [PATCH] surf: fix OpenCL tests should use UMat --- modules/xfeatures2d/test/test_features2d.cpp | 29 ++++++++++++++++++-- modules/xfeatures2d/test/test_surf.ocl.cpp | 24 ++++++++-------- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/modules/xfeatures2d/test/test_features2d.cpp b/modules/xfeatures2d/test/test_features2d.cpp index dd48f3b63..5ddc371f3 100644 --- a/modules/xfeatures2d/test/test_features2d.cpp +++ b/modules/xfeatures2d/test/test_features2d.cpp @@ -408,7 +408,18 @@ protected: Mat calcDescriptors; double t = (double)getTickCount(); - dextractor->compute( img, keypoints, calcDescriptors ); +#ifdef HAVE_OPENCL + if(ocl::useOpenCL()) + { + cv::UMat uimg; + img.copyTo(uimg); + dextractor->compute(uimg, keypoints, calcDescriptors); + } + else +#endif + { + dextractor->compute(img, keypoints, calcDescriptors); + } t = getTickCount() - t; ts->printf(cvtest::TS::LOG, "\nAverage time of computing one descriptor = %g ms.\n", t/((double)getTickFrequency()*1000.)/calcDescriptors.rows ); @@ -1277,8 +1288,20 @@ protected: } vector kpt1, kpt2; Mat d1, d2; - f2d->detectAndCompute(img1, Mat(), kpt1, d1); - f2d->detectAndCompute(img1, Mat(), kpt2, d2); +#ifdef HAVE_OPENCL + if(ocl::useOpenCL()) + { + cv::UMat uimg1; + img1.copyTo(uimg1); + f2d->detectAndCompute(uimg1, Mat(), kpt1, d1); + f2d->detectAndCompute(uimg1, Mat(), kpt2, d2); + } + else +#endif + { + f2d->detectAndCompute(img1, Mat(), kpt1, d1); + f2d->detectAndCompute(img1, Mat(), kpt2, d2); + } for( size_t i = 0; i < kpt1.size(); i++ ) CV_Assert(kpt1[i].response > 0 ); for( size_t i = 0; i < kpt2.size(); i++ ) diff --git a/modules/xfeatures2d/test/test_surf.ocl.cpp b/modules/xfeatures2d/test/test_surf.ocl.cpp index 561d1c416..d3131c3d8 100644 --- a/modules/xfeatures2d/test/test_surf.ocl.cpp +++ b/modules/xfeatures2d/test/test_surf.ocl.cpp @@ -144,18 +144,18 @@ PARAM_TEST_CASE(SURF, HessianThreshold, Octaves, OctaveLayers, Extended, Upright TEST_P(SURF, Detector) { - cv::UMat image; - cv::ocl::setUseOpenCL(true); - cv::imread(string(cvtest::TS::ptr()->get_data_path()) + "shared/fruits.png", cv::IMREAD_GRAYSCALE).copyTo(image); + cv::UMat image; + cv::ocl::setUseOpenCL(true); + cv::imread(string(cvtest::TS::ptr()->get_data_path()) + "shared/fruits.png", cv::IMREAD_GRAYSCALE).copyTo(image); ASSERT_FALSE(image.empty()); cv::Ptr surf = cv::xfeatures2d::SURF::create(hessianThreshold, nOctaves, nOctaveLayers, extended, upright); std::vector keypoints; surf->detect(image, keypoints, cv::noArray()); - cv::ocl::setUseOpenCL(false); + cv::ocl::setUseOpenCL(false); std::vector keypoints_gold; - surf->detect(image, keypoints_gold, cv::noArray()); + surf->detect(image, keypoints_gold, cv::noArray()); ASSERT_EQ(keypoints_gold.size(), keypoints.size()); int matchedCount = getMatchedPointsCount(keypoints_gold, keypoints); @@ -166,23 +166,23 @@ TEST_P(SURF, Detector) TEST_P(SURF, Descriptor) { - cv::UMat image; - cv::ocl::setUseOpenCL(true); - cv::imread(string(cvtest::TS::ptr()->get_data_path()) + "shared/fruits.png", cv::IMREAD_GRAYSCALE).copyTo(image); + cv::UMat image; + cv::ocl::setUseOpenCL(true); + cv::imread(string(cvtest::TS::ptr()->get_data_path()) + "shared/fruits.png", cv::IMREAD_GRAYSCALE).copyTo(image); ASSERT_FALSE(image.empty()); - cv::Ptr surf = cv::xfeatures2d::SURF::create(hessianThreshold, nOctaves, nOctaveLayers, extended, upright); + cv::Ptr surf = cv::xfeatures2d::SURF::create(hessianThreshold, nOctaves, nOctaveLayers, extended, upright); std::vector keypoints; - surf->detect(image, keypoints, cv::noArray()); + surf->detect(image, keypoints, cv::noArray()); cv::UMat descriptors; surf->detectAndCompute(image, cv::noArray(), keypoints, descriptors, true); - cv::ocl::setUseOpenCL(false); + cv::ocl::setUseOpenCL(false); cv::Mat descriptors_gold; - surf->detectAndCompute(image, cv::noArray(), keypoints, descriptors_gold, true); + surf->detectAndCompute(image, cv::noArray(), keypoints, descriptors_gold, true); cv::BFMatcher matcher(surf->defaultNorm()); std::vector matches;