From 734de34b7a9d42d79efff3dd186115f74eec3f9b Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Mon, 9 Dec 2019 14:51:02 +0300 Subject: [PATCH] Merge pull request #16085 from alalek:imgproc_threshold_to_zero_ipp_bug * imgproc(IPP): wrong result from threshold(THRESH_TOZERO) * imgproc(IPP): disable IPP code to pass THRESH_TOZERO test --- modules/imgproc/src/thresh.cpp | 2 ++ modules/imgproc/test/test_thresh.cpp | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/modules/imgproc/src/thresh.cpp b/modules/imgproc/src/thresh.cpp index 466b0a8..2e6690e 100644 --- a/modules/imgproc/src/thresh.cpp +++ b/modules/imgproc/src/thresh.cpp @@ -774,6 +774,7 @@ thresh_32f( const Mat& _src, Mat& _dst, float thresh, float maxval, int type ) } setIppErrorStatus(); break; +#if 0 // details: https://github.com/opencv/opencv/pull/16085 case THRESH_TOZERO: if (0 <= CV_INSTRUMENT_FUN_IPP(ippiThreshold_LTVal_32f_C1R, src, (int)src_step*sizeof(src[0]), dst, (int)dst_step*sizeof(dst[0]), sz, thresh + FLT_EPSILON, 0)) { @@ -782,6 +783,7 @@ thresh_32f( const Mat& _src, Mat& _dst, float thresh, float maxval, int type ) } setIppErrorStatus(); break; +#endif case THRESH_TOZERO_INV: if (0 <= CV_INSTRUMENT_FUN_IPP(ippiThreshold_GTVal_32f_C1R, src, (int)src_step*sizeof(src[0]), dst, (int)dst_step*sizeof(dst[0]), sz, thresh, 0)) { diff --git a/modules/imgproc/test/test_thresh.cpp b/modules/imgproc/test/test_thresh.cpp index e9bed8c..a61095d 100644 --- a/modules/imgproc/test/test_thresh.cpp +++ b/modules/imgproc/test/test_thresh.cpp @@ -434,4 +434,13 @@ BIGDATA_TEST(Imgproc_Threshold, huge) ASSERT_EQ((uint64)nz, n / 2); } +TEST(Imgproc_Threshold, regression_THRESH_TOZERO_IPP_16085) +{ + Size sz(16, 16); + Mat input(sz, CV_32F, Scalar::all(2)); + Mat result; + cv::threshold(input, result, 2.0, 0.0, THRESH_TOZERO); + EXPECT_EQ(0, cv::norm(result, NORM_INF)); +} + }} // namespace -- 2.7.4