From fd4fac946a4ac5e414e17d86f896554dd2592223 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Fri, 6 Dec 2019 15:59:06 +0300 Subject: [PATCH] gapi(test): avoid using of unstable random floating-point input --- modules/gapi/test/common/gapi_tests_common.hpp | 33 ++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/modules/gapi/test/common/gapi_tests_common.hpp b/modules/gapi/test/common/gapi_tests_common.hpp index 0838849..8307f28 100644 --- a/modules/gapi/test/common/gapi_tests_common.hpp +++ b/modules/gapi/test/common/gapi_tests_common.hpp @@ -74,7 +74,7 @@ public: cv::Scalar initScalarRandU(unsigned upper) { auto& rng = cv::theRNG(); - double s1 = rng(upper); + double s1 = rng(upper); // FIXIT: RNG result is 'int', not double double s2 = rng(upper); double s3 = rng(upper); double s4 = rng(upper); @@ -97,8 +97,23 @@ public: sc = initScalarRandU(100); - cv::randu(in_mat1, cv::Scalar::all(0), cv::Scalar::all(255)); - cv::randu(in_mat2, cv::Scalar::all(0), cv::Scalar::all(255)); + // Details: https://github.com/opencv/opencv/pull/16083 + //if (CV_MAT_DEPTH(type) < CV_32F) + if (1) + { + cv::randu(in_mat1, cv::Scalar::all(0), cv::Scalar::all(255)); + cv::randu(in_mat2, cv::Scalar::all(0), cv::Scalar::all(255)); + } + else + { + const int fscale = 256; // avoid bits near ULP, generate stable test input + Mat in_mat32s(in_mat1.size(), CV_MAKE_TYPE(CV_32S, CV_MAT_CN(type))); + cv::randu(in_mat32s, cv::Scalar::all(0), cv::Scalar::all(255 * fscale)); + in_mat32s.convertTo(in_mat1, type, 1.0f / fscale, 0); + + cv::randu(in_mat32s, cv::Scalar::all(0), cv::Scalar::all(255 * fscale)); + in_mat32s.convertTo(in_mat2, type, 1.0f / fscale, 0); + } if (createOutputMatrices) { @@ -111,7 +126,17 @@ public: in_mat1 = cv::Mat(sz_in, type); sc = initScalarRandU(100); - cv::randu(in_mat1, cv::Scalar::all(0), cv::Scalar::all(255)); + if (CV_MAT_DEPTH(type) < CV_32F) + { + cv::randu(in_mat1, cv::Scalar::all(0), cv::Scalar::all(255)); + } + else + { + const int fscale = 256; // avoid bits near ULP, generate stable test input + Mat in_mat32s(in_mat1.size(), CV_MAKE_TYPE(CV_32S, CV_MAT_CN(type))); + cv::randu(in_mat32s, cv::Scalar::all(0), cv::Scalar::all(255 * fscale)); + in_mat32s.convertTo(in_mat1, type, 1.0f / fscale, 0); + } if (createOutputMatrices) { -- 2.7.4