diff --git a/modules/core/include/opencv2/core.hpp b/modules/core/include/opencv2/core.hpp index d875ce2d76..e71d9c426b 100644 --- a/modules/core/include/opencv2/core.hpp +++ b/modules/core/include/opencv2/core.hpp @@ -826,9 +826,9 @@ CV_EXPORTS void minMaxLoc(const SparseMat& a, double* minVal, The function reduce reduces the matrix to a vector by treating the matrix rows/columns as a set of 1D vectors and performing the specified operation on the vectors until a single row/column is obtained. For example, the function can be used to compute horizontal and vertical projections of a -raster image. In case of REDUCE_SUM and REDUCE_AVG , the output may have a larger element -bit-depth to preserve accuracy. And multi-channel arrays are also supported in these two reduction -modes. +raster image. In case of REDUCE_MAX and REDUCE_MIN , the output image should have the same type as the source one. +In case of REDUCE_SUM and REDUCE_AVG , the output may have a larger element bit-depth to preserve accuracy. +And multi-channel arrays are also supported in these two reduction modes. @param src input 2D matrix. @param dst output vector. Its size and type is defined by dim and dtype parameters. @param dim dimension index along which the matrix is reduced. 0 means that the matrix is reduced to diff --git a/modules/core/test/test_mat.cpp b/modules/core/test/test_mat.cpp index 1e64cdf886..9aeb02ed39 100644 --- a/modules/core/test/test_mat.cpp +++ b/modules/core/test/test_mat.cpp @@ -1509,3 +1509,14 @@ TEST(Mat, regression_6696_BigData_8Gb) EXPECT_EQ(4, destImageBGR.at(height-1, width-1)[3]); } #endif + +TEST(Reduce, regression_should_fail_bug_4594) +{ + cv::Mat src = cv::Mat::eye(4, 4, CV_8U); + std::vector dst; + + EXPECT_THROW(cv::reduce(src, dst, 0, CV_REDUCE_MIN, CV_32S), cv::Exception); + EXPECT_THROW(cv::reduce(src, dst, 0, CV_REDUCE_MAX, CV_32S), cv::Exception); + EXPECT_NO_THROW(cv::reduce(src, dst, 0, CV_REDUCE_SUM, CV_32S)); + EXPECT_NO_THROW(cv::reduce(src, dst, 0, CV_REDUCE_AVG, CV_32S)); +}