OpenCV算术运算产生cv::MatExpr
,例如:
MatExpr
operator+
(const Mat & a, const Mat &b);
我看到它用于在计算表达式之前表示它。这样做的目的是什么?
答案 0 :(得分:7)
让我们说你有这样的表达:
Mat A = 3 + B * 5;
其中B
也是Mat
。如果运营商+
和*
在哪里返回Mat
,B * 5
会创建一个临时Mat
,那么+
运营商就会拥有创建另一个Mat
。相反,B * 5
会返回MatExpr
,而Mat
实际上并未创建+
,它只会记住"它需要进行的操作。然后,MatExpr
运算符会创建另一个=
,只有Mat
运算符会创建Mat
,从而避免使用临时u'1:19 AM Eastern, Tuesday, May 16, 2017'
。
见https://en.wikipedia.org/wiki/Lazy_evaluation