2016-10-10 2 views
2

OpenCV arithmetische Operationen erzeugen eine cv::MatExpr, zum Beispiel:Was ist der Zweck von cv :: MatExpr?

MatExproperator+(const Mat & a, const Mat &b);

Ich sehe, dass dies einen Ausdruck darstellen verwendet wird, bevor es ausgewertet wird. Was ist der Zweck, dies zu tun?

+0

https://en.wikipedia.org/wiki/Expression_templates – Miki

+0

@Miki Dies scheint anders zu sein, weil 'cv :: MatExpr' nicht Templat ist. – Owen

+0

http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#matrixexpressions –

Antwort

4

Angenommen, Sie haben diesen Ausdruck:
Mat A = 3 + B * 5;
wo B auch ein Mat ist. Wenn die Operatoren + und * einen zurückgeben, hätte B * 5 einen temporären Mat erstellen müssen und dann der +-Operator eine andere Mat erstellen würde. Stattdessen gibt B * 5 eine MatExpr zurück, die nicht tatsächlich ein erstellt, es "erinnert" sich nur an die Operation, die es ausführen muss. Dann erstellt der Operator + einen weiteren MatExpr, und nur der Operator = erstellt einen und vermeidet damit die temporäre .
Siehe https://en.wikipedia.org/wiki/Lazy_evaluation