From d54d01ca4681dc18999b721afadba109e04a64e8 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Sun, 23 Feb 2020 17:05:05 +0000 Subject: [PATCH] core(MatExpr): fix .type() bug --- modules/core/src/matrix_expressions.cpp | 2 +- modules/core/test/test_mat.cpp | 11 +++++++++++ modules/dnn/test/test_misc.cpp | 5 ++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/modules/core/src/matrix_expressions.cpp b/modules/core/src/matrix_expressions.cpp index ea43133..5ac1faf 100644 --- a/modules/core/src/matrix_expressions.cpp +++ b/modules/core/src/matrix_expressions.cpp @@ -1257,7 +1257,7 @@ int MatExpr::type() const if( isInitializer(*this) ) return a.type(); if( isCmp(*this) ) - return CV_8U; + return CV_MAKETYPE(CV_8U, a.channels()); return op ? op->type(*this) : -1; } diff --git a/modules/core/test/test_mat.cpp b/modules/core/test/test_mat.cpp index 7aa79c4..3fa8442 100644 --- a/modules/core/test/test_mat.cpp +++ b/modules/core/test/test_mat.cpp @@ -2017,6 +2017,17 @@ TEST(Core_MatExpr, issue_13926) EXPECT_GE(1e-6, cvtest::norm(M2*M1, M2*M2, NORM_INF)) << Mat(M2*M1) << std::endl << Mat(M2*M2); } +TEST(Core_MatExpr, issue_16655) +{ + Mat a(Size(5, 5), CV_32FC3, Scalar::all(1)); + Mat b(Size(5, 5), CV_32FC3, Scalar::all(2)); + MatExpr ab_expr = a != b; + Mat ab_mat = ab_expr; + EXPECT_EQ(CV_8UC3, ab_expr.type()) + << "MatExpr: CV_8UC3 != " << typeToString(ab_expr.type()); + EXPECT_EQ(CV_8UC3, ab_mat.type()) + << "Mat: CV_8UC3 != " << typeToString(ab_mat.type()); +} #ifdef HAVE_EIGEN TEST(Core_Eigen, eigen2cv_check_Mat_type) diff --git a/modules/dnn/test/test_misc.cpp b/modules/dnn/test/test_misc.cpp index ca60b91..eaab49e 100644 --- a/modules/dnn/test/test_misc.cpp +++ b/modules/dnn/test/test_misc.cpp @@ -56,7 +56,10 @@ TEST(imagesFromBlob, Regression) for (int i = 0; i < nbOfImages; i++) { - ASSERT_EQ(cv::countNonZero(inputImgs[i] != outputImgs[i]), 0); + EXPECT_EQ(0, cvtest::norm(inputImgs[i], outputImgs[i], NORM_INF)) + << "i=" << i + << " inputImgs[i]=" << inputImgs[i].size + << " outputImgs[i]=" << outputImgs[i].size; } } -- 2.7.4