diff --git a/modules/core/include/opencv2/core/mat.inl.hpp b/modules/core/include/opencv2/core/mat.inl.hpp index 2d79130c32..dbd9584a59 100644 --- a/modules/core/include/opencv2/core/mat.inl.hpp +++ b/modules/core/include/opencv2/core/mat.inl.hpp @@ -508,7 +508,6 @@ Mat::Mat(int _rows, int _cols, int _type, void* _data, size_t _step) } else { - if( rows == 1 ) _step = minstep; CV_DbgAssert( _step >= minstep ); if (_step % esz1 != 0) @@ -516,7 +515,8 @@ Mat::Mat(int _rows, int _cols, int _type, void* _data, size_t _step) CV_Error(Error::BadStep, "Step must be a multiple of esz1"); } - flags |= _step == minstep ? CONTINUOUS_FLAG : 0; + if (_step == minstep || rows == 1) + flags |= CONTINUOUS_FLAG; } step[0] = _step; step[1] = esz; @@ -541,7 +541,6 @@ Mat::Mat(Size _sz, int _type, void* _data, size_t _step) } else { - if( rows == 1 ) _step = minstep; CV_DbgAssert( _step >= minstep ); if (_step % esz1 != 0) @@ -549,7 +548,8 @@ Mat::Mat(Size _sz, int _type, void* _data, size_t _step) CV_Error(Error::BadStep, "Step must be a multiple of esz1"); } - flags |= _step == minstep ? CONTINUOUS_FLAG : 0; + if (_step == minstep || rows == 1) + flags |= CONTINUOUS_FLAG; } step[0] = _step; step[1] = esz; diff --git a/modules/imgproc/test/test_filter.cpp b/modules/imgproc/test/test_filter.cpp index c995feb4b2..e7e05f8c93 100644 --- a/modules/imgproc/test/test_filter.cpp +++ b/modules/imgproc/test/test_filter.cpp @@ -1982,6 +1982,27 @@ TEST(Imgproc_Blur, borderTypes) EXPECT_DOUBLE_EQ(0.0, cvtest::norm(expected_dst, dst, NORM_INF)); } +TEST(Imgproc_GaussianBlur, borderTypes) +{ + Size kernelSize(3, 3); + + Mat src_16(16, 16, CV_8UC1, cv::Scalar::all(42)), dst_16; + Mat src_roi_16 = src_16(Rect(1, 1, 14, 14)); + src_roi_16.setTo(cv::Scalar::all(3)); + + cv::GaussianBlur(src_roi_16, dst_16, kernelSize, 0, 0, BORDER_REPLICATE); + + EXPECT_EQ(20, dst_16.at(0, 0)); + + Mat src(3, 12, CV_8UC1, cv::Scalar::all(42)), dst; + Mat src_roi = src(Rect(1, 1, 10, 1)); + src_roi.setTo(cv::Scalar::all(2)); + + cv::GaussianBlur(src_roi, dst, kernelSize, 0, 0, BORDER_REPLICATE); + + EXPECT_EQ(27, dst.at(0, 0)); +} + TEST(Imgproc_Morphology, iterated) { RNG& rng = theRNG();