From 5bc10ef796c29563e8916ff31b5c1a262422a93f Mon Sep 17 00:00:00 2001 From: Ilya Lavrenov Date: Tue, 12 Jul 2016 12:39:49 +0300 Subject: [PATCH] fixed empty image condition in resize --- modules/imgproc/src/imgwarp.cpp | 11 +++---- modules/imgproc/test/test_imgwarp_strict.cpp | 31 ++++++++++++++++++++ 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/modules/imgproc/src/imgwarp.cpp b/modules/imgproc/src/imgwarp.cpp index d98ec11ad..54054883d 100644 --- a/modules/imgproc/src/imgwarp.cpp +++ b/modules/imgproc/src/imgwarp.cpp @@ -3477,7 +3477,7 @@ void cv::resize( InputArray _src, OutputArray _dst, Size dsize, { Size ssize = _src.size(); - CV_Assert( ssize.area() > 0 ); + CV_Assert( ssize.width > 0 && ssize.height > 0 ); CV_Assert( dsize.area() > 0 || (inv_scale_x > 0 && inv_scale_y > 0) ); if( dsize.area() == 0 ) { @@ -3498,10 +3498,11 @@ void cv::resize( InputArray _src, OutputArray _dst, Size dsize, _dst.create(dsize, src.type()); Mat dst = _dst.getMat(); - if (dsize == ssize) { - // Source and destination are of same size. Use simple copy. - src.copyTo(dst); - return; + if (dsize == ssize) + { + // Source and destination are of same size. Use simple copy. + src.copyTo(dst); + return; } hal::resize(src.type(), src.data, src.step, src.cols, src.rows, dst.data, dst.step, dst.cols, dst.rows, inv_scale_x, inv_scale_y, interpolation); diff --git a/modules/imgproc/test/test_imgwarp_strict.cpp b/modules/imgproc/test/test_imgwarp_strict.cpp index 4756b7f42..7a9c91283 100644 --- a/modules/imgproc/test/test_imgwarp_strict.cpp +++ b/modules/imgproc/test/test_imgwarp_strict.cpp @@ -1218,3 +1218,34 @@ TEST(Imgproc_Resize_Test, accuracy) { CV_Resize_Test test; test.safe_run(); } TEST(Imgproc_Remap_Test, accuracy) { CV_Remap_Test test; test.safe_run(); } TEST(Imgproc_WarpAffine_Test, accuracy) { CV_WarpAffine_Test test; test.safe_run(); } TEST(Imgproc_WarpPerspective_Test, accuracy) { CV_WarpPerspective_Test test; test.safe_run(); } + +//////////////////////////////////////////////////////////////////////////////////////////////////////// + +#ifdef OPENCV_TEST_BIGDATA + +CV_ENUM(Interpolation, INTER_NEAREST, INTER_LINEAR, INTER_CUBIC, INTER_AREA) + +class Imgproc_Resize : + public ::testing::TestWithParam +{ +public: + virtual void SetUp() + { + inter = GetParam(); + } + +protected: + int inter; +}; + +TEST_P(Imgproc_Resize, BigSize) +{ + cv::Mat src(46342, 46342, CV_8UC3, cv::Scalar::all(10)), dst; + ASSERT_FALSE(src.empty()); + + ASSERT_NO_THROW(cv::resize(src, dst, cv::Size(), 0.5, 0.5, inter)); +} + +INSTANTIATE_TEST_CASE_P(Imgproc, Imgproc_Resize, Interpolation::all()); + +#endif