Merge pull request #1011 from wecacuee:master
This commit is contained in:
commit
c1f8d9e3d2
@ -77,6 +77,7 @@ struct CV_EXPORTS Matx_AddOp {};
|
|||||||
struct CV_EXPORTS Matx_SubOp {};
|
struct CV_EXPORTS Matx_SubOp {};
|
||||||
struct CV_EXPORTS Matx_ScaleOp {};
|
struct CV_EXPORTS Matx_ScaleOp {};
|
||||||
struct CV_EXPORTS Matx_MulOp {};
|
struct CV_EXPORTS Matx_MulOp {};
|
||||||
|
struct CV_EXPORTS Matx_DivOp {};
|
||||||
struct CV_EXPORTS Matx_MatMulOp {};
|
struct CV_EXPORTS Matx_MatMulOp {};
|
||||||
struct CV_EXPORTS Matx_TOp {};
|
struct CV_EXPORTS Matx_TOp {};
|
||||||
|
|
||||||
@ -174,6 +175,7 @@ public:
|
|||||||
Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_SubOp);
|
Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_SubOp);
|
||||||
template<typename _T2> Matx(const Matx<_Tp, m, n>& a, _T2 alpha, Matx_ScaleOp);
|
template<typename _T2> Matx(const Matx<_Tp, m, n>& a, _T2 alpha, Matx_ScaleOp);
|
||||||
Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_MulOp);
|
Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_MulOp);
|
||||||
|
Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_DivOp);
|
||||||
template<int l> Matx(const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b, Matx_MatMulOp);
|
template<int l> Matx(const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b, Matx_MatMulOp);
|
||||||
Matx(const Matx<_Tp, n, m>& a, Matx_TOp);
|
Matx(const Matx<_Tp, n, m>& a, Matx_TOp);
|
||||||
|
|
||||||
@ -746,6 +748,13 @@ Matx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_Mul
|
|||||||
val[i] = saturate_cast<_Tp>(a.val[i] * b.val[i]);
|
val[i] = saturate_cast<_Tp>(a.val[i] * b.val[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename _Tp, int m, int n> inline
|
||||||
|
Matx<_Tp,m,n>::Matx(const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b, Matx_DivOp)
|
||||||
|
{
|
||||||
|
for( int i = 0; i < channels; i++ )
|
||||||
|
val[i] = saturate_cast<_Tp>(a.val[i] / b.val[i]);
|
||||||
|
}
|
||||||
|
|
||||||
template<typename _Tp, int m, int n> template<int l> inline
|
template<typename _Tp, int m, int n> template<int l> inline
|
||||||
Matx<_Tp,m,n>::Matx(const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b, Matx_MatMulOp)
|
Matx<_Tp,m,n>::Matx(const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b, Matx_MatMulOp)
|
||||||
{
|
{
|
||||||
@ -1162,6 +1171,12 @@ Vec<_Tp, m> operator * (const Matx<_Tp, m, n>& a, const Vec<_Tp, n>& b)
|
|||||||
return (const Vec<_Tp, m>&)(c);
|
return (const Vec<_Tp, m>&)(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename _Tp, int m, int n> static inline
|
||||||
|
Matx<_Tp, m, n> operator / (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b)
|
||||||
|
{
|
||||||
|
return Matx<_Tp, m, n>(a, b, Matx_DivOp());
|
||||||
|
}
|
||||||
|
|
||||||
template<typename _Tp, int m, int n> static inline
|
template<typename _Tp, int m, int n> static inline
|
||||||
bool operator == (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b)
|
bool operator == (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b)
|
||||||
{
|
{
|
||||||
@ -1337,4 +1352,4 @@ template<typename _Tp> inline Vec<_Tp, 4>& operator *= (Vec<_Tp, 4>& v1, const V
|
|||||||
|
|
||||||
} // cv
|
} // cv
|
||||||
|
|
||||||
#endif // __OPENCV_CORE_MATX_HPP__
|
#endif // __OPENCV_CORE_MATX_HPP__
|
||||||
|
@ -75,6 +75,7 @@ protected:
|
|||||||
bool TestSparseMat();
|
bool TestSparseMat();
|
||||||
bool TestVec();
|
bool TestVec();
|
||||||
bool TestMatxMultiplication();
|
bool TestMatxMultiplication();
|
||||||
|
bool TestMatxElementwiseDivison();
|
||||||
bool TestSubMatAccess();
|
bool TestSubMatAccess();
|
||||||
bool TestExp();
|
bool TestExp();
|
||||||
bool TestSVD();
|
bool TestSVD();
|
||||||
@ -891,6 +892,28 @@ bool CV_OperationsTest::TestMatxMultiplication()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CV_OperationsTest::TestMatxElementwiseDivison()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Matx22f mat(2, 4, 6, 8);
|
||||||
|
Matx22f mat2(2, 2, 2, 2);
|
||||||
|
|
||||||
|
Matx22f res = mat / mat2;
|
||||||
|
|
||||||
|
if(res(0, 0) != 1.0) throw test_excep();
|
||||||
|
if(res(0, 1) != 2.0) throw test_excep();
|
||||||
|
if(res(1, 0) != 3.0) throw test_excep();
|
||||||
|
if(res(1, 1) != 4.0) throw test_excep();
|
||||||
|
}
|
||||||
|
catch(const test_excep&)
|
||||||
|
{
|
||||||
|
ts->set_failed_test_info(cvtest::TS::FAIL_INVALID_OUTPUT);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool CV_OperationsTest::TestVec()
|
bool CV_OperationsTest::TestVec()
|
||||||
{
|
{
|
||||||
@ -1109,6 +1132,9 @@ void CV_OperationsTest::run( int /* start_from */)
|
|||||||
if (!TestMatxMultiplication())
|
if (!TestMatxMultiplication())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (!TestMatxElementwiseDivison())
|
||||||
|
return;
|
||||||
|
|
||||||
if (!TestSubMatAccess())
|
if (!TestSubMatAccess())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user