From d60b1f2f82a272d6c34eb848675a691c5053b251 Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Wed, 27 Jun 2012 20:51:48 +0000 Subject: [PATCH] fixed bug #2106; added test --- modules/core/src/matop.cpp | 4 +++- modules/core/test/test_operations.cpp | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/modules/core/src/matop.cpp b/modules/core/src/matop.cpp index c7fb84133a..736984e85d 100644 --- a/modules/core/src/matop.cpp +++ b/modules/core/src/matop.cpp @@ -1491,7 +1491,9 @@ void MatOp_GEMM::multiply(const MatExpr& e, double s, MatExpr& res) const void MatOp_GEMM::transpose(const MatExpr& e, MatExpr& res) const { res = e; - res.flags ^= CV_GEMM_A_T | CV_GEMM_B_T | CV_GEMM_C_T; + res.flags = (!(e.flags & CV_GEMM_A_T) ? CV_GEMM_B_T : 0) | + (!(e.flags & CV_GEMM_B_T) ? CV_GEMM_A_T : 0) | + (!(e.flags & CV_GEMM_C_T) ? CV_GEMM_C_T : 0); swap(res.a, res.b); } diff --git a/modules/core/test/test_operations.cpp b/modules/core/test/test_operations.cpp index 62dbc9d649..5297f95f24 100644 --- a/modules/core/test/test_operations.cpp +++ b/modules/core/test/test_operations.cpp @@ -758,6 +758,13 @@ bool CV_OperationsTest::TestTemplateMat() split(mf2, mvf2); CV_Assert( norm(mvf2[0], mvf[0], CV_C) == 0 && norm(mvf2[1], mvf[1], CV_C) == 0 ); + + { + Mat a(2,2,CV_32F,1.f); + Mat b(1,2,CV_32F,1.f); + Mat c = (a*b.t()).t(); + CV_Assert( norm(c, CV_L1) == 4. ); + } } catch (const test_excep& e) { -- GitLab