From 75b1788c6bea895ecaedffd95a1342bae7de855f Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Tue, 24 Apr 2012 12:45:19 +0000 Subject: [PATCH] added "Matx*Vec -> Vec" operator (ticket #1830) --- modules/core/include/opencv2/core/operations.hpp | 8 ++++++++ modules/core/test/test_operations.cpp | 15 +++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/modules/core/include/opencv2/core/operations.hpp b/modules/core/include/opencv2/core/operations.hpp index 83947b2..ba45886 100644 --- a/modules/core/include/opencv2/core/operations.hpp +++ b/modules/core/include/opencv2/core/operations.hpp @@ -638,6 +638,14 @@ Matx<_Tp, m, n> operator * (const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b) } +template static inline +Vec<_Tp, m> operator * (const Matx<_Tp, m, n>& a, const Vec<_Tp, n>& b) +{ + Matx<_Tp, m, 1> c(a, b, Matx_MatMulOp()); + return reinterpret_cast&>(c); +} + + template static inline Point_<_Tp> operator * (const Matx<_Tp, 2, 2>& a, const Point_<_Tp>& b) { diff --git a/modules/core/test/test_operations.cpp b/modules/core/test/test_operations.cpp index 3917e5f..1b645b5 100644 --- a/modules/core/test/test_operations.cpp +++ b/modules/core/test/test_operations.cpp @@ -754,12 +754,19 @@ bool CV_OperationsTest::TestMatxMultiplication() { try { - Matx33f mat(1, 0, 0, 0, 1, 0, 0, 0, 1); // Identity matrix + Matx33f mat(1, 1, 1, 0, 1, 1, 0, 0, 1); // Identity matrix Point2f pt(3, 4); Point3f res = mat * pt; // Correctly assumes homogeneous coordinates - if(res.x != 3.0) throw test_excep(); - if(res.y != 4.0) throw test_excep(); - if(res.z != 1.0) throw test_excep(); + + Vec3f res2 = mat*Vec3f(res.x, res.y, res.z); + + if(res.x != 8.0) throw test_excep(); + if(res.y != 5.0) throw test_excep(); + if(res.z != 1.0) throw test_excep(); + + if(res2[0] != 14.0) throw test_excep(); + if(res2[1] != 6.0) throw test_excep(); + if(res2[2] != 1.0) throw test_excep(); } catch(const test_excep&) { -- 2.7.4