Если обратиться к документации cv::Mat
, то функциональность, которую вы ищете, находится под operator=(const MatExpr& expr)
: https://docs.opencv.org/trunk/d3/d63/classcv_1_1Mat.html#a2a0798475170fb3a23b5bc63686de334
В частности, этот раздел документации полезен (выделено мной ):
Это перегруженная функция-член, предоставленная для удобства. Она отличается от указанной выше функции только тем, какие аргументы она принимает.
Параметры
expr
: Назначенный объект матричного выражения. В отличие от первой формы операции присваивания, вторая форма может повторно использовать уже выделенную матрицу, если она имеет правильный размер и тип, соответствующие результату выражения матрицы . Он автоматически обрабатывается реальной функцией, в которую расширяются матричные выражения. Например, C=A+B
расширяется до add(A, B, C)
, а добавление заботится об автоматическом c C
перераспределении.
Следовательно, происходит следующее: перегруженный оператор для присваивания (=
) - это то, что вызывается, а MatExpr
expr
, то есть выражение MatExpr
, вычисляется с правой стороны. этого. Так получилось, что вычисляемое выражение является оператором сложения, поэтому выполняется сложение двух cv::Mat
, которое затем создает новую матрицу в левой части выражения.
Мораль этого история заключается в поиске ответа в документации. Вот как я узнал об этом.