それぞれのMat変数のサイズは不変として,以下の様なループ処理
cv::Mat a, b, c; while(1) { a = (b == b) & c; }
と
cv::Mat a, b, c, d; while(1) { d = b == b; a = d & c; }
では,後者のほうが若干速い。その理由は,式テンプレート MatExpr をオペランドにとる演算は,加減乗除と要素毎の積(mul),負号,絶対値の演算しかない*1ので,それ以外の演算(ここでは & 演算)でオペランドが一時オブジェクトの Mat に変換される。後者は d で一時オブジェクトは生成されないので,この点で後者の方が速くなる,と思われる。
*1:opencv2/core/mat.hpp:1246くらいから