From 71cbd6f02eb4480970d38ed08132e8b9e5503b05 Mon Sep 17 00:00:00 2001 From: Ilya Lavrenov Date: Tue, 19 Jul 2016 15:53:52 +0300 Subject: [PATCH] fixed bug #5775 --- modules/core/src/arithm.cpp | 2 +- modules/core/test/test_arithm.cpp | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/modules/core/src/arithm.cpp b/modules/core/src/arithm.cpp index 8ef3370bde..fc20a18311 100644 --- a/modules/core/src/arithm.cpp +++ b/modules/core/src/arithm.cpp @@ -643,7 +643,7 @@ static void arithm_op(InputArray _src1, InputArray _src2, OutputArray _dst, if (!muldiv) { Mat sc = psrc2->getMat(); - depth2 = actualScalarDepth(sc.ptr(), cn); + depth2 = actualScalarDepth(sc.ptr(), sz2 == Size(1, 1) ? cn2 : cn); if( depth2 == CV_64F && (depth1 < CV_32S || depth1 == CV_32F) ) depth2 = CV_32F; } diff --git a/modules/core/test/test_arithm.cpp b/modules/core/test/test_arithm.cpp index 21c16b9c47..1289b73e39 100644 --- a/modules/core/test/test_arithm.cpp +++ b/modules/core/test/test_arithm.cpp @@ -1910,3 +1910,21 @@ TEST(MinMaxLoc, regression_4955_nans) cv::Mat nan_mat(2, 2, CV_32F, cv::Scalar(NAN)); cv::minMaxLoc(nan_mat, NULL, NULL, NULL, NULL); } + +TEST(Subtract, scalarc1_matc3) +{ + int scalar = 255; + cv::Mat srcImage(5, 5, CV_8UC3, cv::Scalar::all(5)), destImage; + cv::subtract(scalar, srcImage, destImage); + + ASSERT_EQ(0, cv::norm(cv::Mat(5, 5, CV_8UC3, cv::Scalar::all(250)), destImage, cv::NORM_INF)); +} + +TEST(Subtract, scalarc4_matc4) +{ + cv::Scalar sc(255, 255, 255, 255); + cv::Mat srcImage(5, 5, CV_8UC4, cv::Scalar::all(5)), destImage; + cv::subtract(sc, srcImage, destImage); + + ASSERT_EQ(0, cv::norm(cv::Mat(5, 5, CV_8UC4, cv::Scalar::all(250)), destImage, cv::NORM_INF)); +}