From b28d13430c78e9df7e6e2a50b34c0fbd717ff8d1 Mon Sep 17 00:00:00 2001 From: Rostislav Vasilikhin Date: Sat, 3 Sep 2016 21:49:54 +0300 Subject: [PATCH] fixed http://code.opencv.org/issues/3828 --- modules/core/src/stat.cpp | 5 +++++ modules/core/test/test_arithm.cpp | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/modules/core/src/stat.cpp b/modules/core/src/stat.cpp index 3c24f02541..e88d175108 100644 --- a/modules/core/src/stat.cpp +++ b/modules/core/src/stat.cpp @@ -2587,6 +2587,11 @@ void cv::findNonZero( InputArray _src, OutputArray _idx ) Mat src = _src.getMat(); CV_Assert( src.type() == CV_8UC1 ); int n = countNonZero(src); + if (n == 0) + { + _idx.release(); + return; + } if( _idx.kind() == _InputArray::MAT && !_idx.getMatRef().isContinuous() ) _idx.release(); _idx.create(n, 1, CV_32SC2); diff --git a/modules/core/test/test_arithm.cpp b/modules/core/test/test_arithm.cpp index ac88615955..57adb89210 100644 --- a/modules/core/test/test_arithm.cpp +++ b/modules/core/test/test_arithm.cpp @@ -1810,3 +1810,13 @@ TEST(MinMaxLoc, Mat_IntMax_Without_Mask) ASSERT_EQ(Point(0, 0), minLoc); ASSERT_EQ(Point(0, 0), maxLoc); } + + +TEST(Core_FindNonZero, singular) +{ + Mat img(10, 10, CV_8U, Scalar::all(0)); + vector pts, pts2(10); + findNonZero(img, pts); + findNonZero(img, pts2); + ASSERT_TRUE(pts.empty() && pts2.empty()); +} \ No newline at end of file