From 1a9d8e9447b2dd2449babfab8838c0210021e4cc Mon Sep 17 00:00:00 2001 From: elenagvo Date: Thu, 2 Nov 2017 17:05:17 +0300 Subject: [PATCH 1/2] test for GaussianBlur with border --- modules/imgproc/test/test_filter.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) 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(); From eb136ebba66864a572ff0bc52fedca3cc5ed6090 Mon Sep 17 00:00:00 2001 From: Maksim Shabunin Date: Fri, 3 Nov 2017 17:57:08 +0300 Subject: [PATCH 2/2] Do not reset step for single-row Mat created on user data --- modules/core/include/opencv2/core/mat.inl.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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;