diff --git a/modules/core/src/mean.dispatch.cpp b/modules/core/src/mean.dispatch.cpp index 52c0954ff8..619fae6f89 100644 --- a/modules/core/src/mean.dispatch.cpp +++ b/modules/core/src/mean.dispatch.cpp @@ -592,7 +592,8 @@ void meanStdDev(InputArray _src, OutputArray _mean, OutputArray _sdv, InputArray uchar* ptrs[2] = {}; NAryMatIterator it(arrays, ptrs); int total = (int)it.size, blockSize = total, intSumBlockSize = 0; - int j, count = 0, nz0 = 0; + int j; + int64_t count = 0, nz0 = 0; AutoBuffer _buf(cn*4); double *s = (double*)_buf.data(), *sq = s + cn; int *sbuf = (int*)s, *sqbuf = (int*)sq; diff --git a/modules/core/test/test_arithm.cpp b/modules/core/test/test_arithm.cpp index 332e7d17c6..137f30a13c 100644 --- a/modules/core/test/test_arithm.cpp +++ b/modules/core/test/test_arithm.cpp @@ -2814,6 +2814,19 @@ TEST(Core_MeanStdDev, regression_multichannel) } } +// Related issue : https://github.com/opencv/opencv/issues/26861 +TEST(Core_MeanStdDevTest, LargeImage) +{ + applyTestTag(CV_TEST_TAG_VERYLONG); + applyTestTag(CV_TEST_TAG_MEMORY_14GB); + // (1<<16) * ((1<<15)+10) = ~2.147 billion + cv::Mat largeImage = cv::Mat::ones((1 << 16), ((1 << 15) + 10), CV_8U); + cv::Scalar mean, stddev; + cv::meanStdDev(largeImage, mean, stddev); + EXPECT_NEAR(mean[0], 1.0, 1e-5); + EXPECT_NEAR(stddev[0], 0.0, 1e-5); +} + template static inline void testDivideInitData(Mat& src1, Mat& src2) {