#opencv
#opencv
Вопрос:
Арифметические операции OpenCV приводят cv::MatExpr
к, например:
MatExpr
operator
(const Mat amp; a, const Mat amp;b);
Я вижу, что это используется для представления выражения до его вычисления. Какова цель этого?
Комментарии:
1. en.wikipedia.org/wiki/Expression_templates
2. @Miki Это, кажется, отличается, потому
cv::MatExpr
что не шаблонно.
Ответ №1:
Допустим, у вас есть это выражение:
Mat A = 3 B * 5;
где B
также a Mat
. Если операторы
и *
где возвращать a Mat
, B * 5
должны были бы создать временный Mat
, а затем
оператор должен был бы создать другой Mat
. Вместо B * 5
этого возвращает a MatExpr
, который на самом деле не создает a Mat
, он просто «запоминает» операцию, которую ему нужно выполнить. Затем
оператор создает другой MatExpr
, и только =
оператор создает a Mat
, что позволяет избежать временного Mat
.
Смотрите https://en.wikipedia.org/wiki/Lazy_evaluation