cv::transform は変換行列が2行2列または2行3列でなくても動くかもしれない

試した環境

本題

cv::transform のドキュメントには変換行列m は2行2列または2行3列の行列であることが書かれています。

https://docs.opencv.org/4.5.3/d2/de8/group__core__array.html#ga393164aa54bb9169ce0a8cc44e08ff22

m transformation 2x2 or 2x3 floating-point matrix.

しかし試したところ、ほかの行列でも動きました。 今回試したのは1行3列の変換行列ですが、ほかの場合でも動くかは未確認です。 実験に使ったコードは以下の通りです。

#include <opencv2/opencv.hpp>

int main(int argc, char* argv[]) {
    cv::Mat3b src(4, 4, cv::Vec3b(0, 64, 128));
    cv::Mat dst;
    cv::Mat1f m(1, 3, 1.f);

    cv::transform(src, dst, m);

    std::cout << "src.channels = " << src.channels() << std::endl;
    std::cout << src << std::endl;
    std::cout << "dst.channels = " << dst.channels() << std::endl;
    std::cout << dst << std::endl;
    return 0;
}

結果は以下の通りです。 チャネル数3のsrcがチャネル数1に変換されています。

src.channels = 3
[  0,  64, 128,   0,  64, 128,   0,  64, 128,   0,  64, 128;
   0,  64, 128,   0,  64, 128,   0,  64, 128,   0,  64, 128;
   0,  64, 128,   0,  64, 128,   0,  64, 128,   0,  64, 128;
   0,  64, 128,   0,  64, 128,   0,  64, 128,   0,  64, 128]
dst.channels = 1
[192, 192, 192, 192;
 192, 192, 192, 192;
 192, 192, 192, 192;
 192, 192, 192, 192]