mirror of
https://github.com/opencv/opencv.git
synced 2026-07-29 15:23:05 +04:00
Merge pull request #16700 from alalek:fix_core_matexpr_size_gemm
core: fix MatExpr::size() for gemm() * core(test): MatExpr::size() test for gemm() * core: fix MatExpr::size() for gemm()
This commit is contained in:
committed by
GitHub
parent
a5ca5f6daf
commit
4d0f13544d
@@ -117,8 +117,17 @@ public:
|
||||
|
||||
void transpose(const MatExpr& expr, MatExpr& res) const CV_OVERRIDE;
|
||||
|
||||
Size size(const MatExpr& expr) const CV_OVERRIDE
|
||||
{
|
||||
return Size(
|
||||
(expr.flags & GEMM_2_T) ? expr.b.rows : expr.b.cols,
|
||||
(expr.flags & GEMM_1_T) ? expr.a.cols : expr.a.rows
|
||||
);
|
||||
}
|
||||
|
||||
static void makeExpr(MatExpr& res, int flags, const Mat& a, const Mat& b,
|
||||
double alpha=1, const Mat& c=Mat(), double beta=1);
|
||||
|
||||
};
|
||||
|
||||
static MatOp_GEMM g_MatOp_GEMM;
|
||||
@@ -199,7 +208,7 @@ static inline bool isReciprocal(const MatExpr& e) { return isBin(e,'/') && (!e.b
|
||||
static inline bool isT(const MatExpr& e) { return e.op == &g_MatOp_T; }
|
||||
static inline bool isInv(const MatExpr& e) { return e.op == &g_MatOp_Invert; }
|
||||
static inline bool isSolve(const MatExpr& e) { return e.op == &g_MatOp_Solve; }
|
||||
static inline bool isGEMM(const MatExpr& e) { return e.op == &g_MatOp_GEMM; }
|
||||
//static inline bool isGEMM(const MatExpr& e) { return e.op == &g_MatOp_GEMM; }
|
||||
static inline bool isMatProd(const MatExpr& e) { return e.op == &g_MatOp_GEMM && (!e.c.data || e.beta == 0); }
|
||||
static inline bool isInitializer(const MatExpr& e) { return e.op == getGlobalMatOpInitializer(); }
|
||||
|
||||
@@ -1240,8 +1249,6 @@ Size MatExpr::size() const
|
||||
{
|
||||
if( isT(*this) || isInv(*this) )
|
||||
return Size(a.rows, a.cols);
|
||||
if( isGEMM(*this) )
|
||||
return Size(b.cols, a.rows);
|
||||
if( isSolve(*this) )
|
||||
return Size(b.cols, a.cols);
|
||||
if( isInitializer(*this) )
|
||||
|
||||
Reference in New Issue
Block a user