cv::Matx
OpenCV 2.2 で追加されたコンパイル時固定サイズ行列クラス。cv::Matの基本処理 — OpenCV-CookBook cookbookやマニュアルにない機能もあるので紹介する。対象バージョンは2.3.1。
変数宣言
cv::Matx<Type, Rows, Columns> m;
テンプレート引数に行数、列数を定数で指定する。浮動小数点数型であれば、4行4列以下、1行6列、6行1列、6行6列の行列が以下の書式で typedef されている。https://code.ros.org/trac/opencv/browser/branches/2.3/opencv/modules/core/include/opencv2/core/core.hpp?desc=1#L519
cv::Matx[1-46][1-46][fd]
たとえば、cv::Matx24d は double型2行4列の行列である。
初期化
行列の要素数が10個以下、12個、16個の場合なら以下の書式で初期化可能。
cv::Matx22d m22d(0, 1, 2, 3); cv::Matx34d m34d(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1);
その他
面倒なので他は書かないけれど、基本的にcv::Matにあるもののほとんどは使える。なければ型変換すればよい。
Matへの型変換
型変換の際、Matと異なり実体は共有されないので、Matへの変更先の変数を書き換えることで元の変数の値を書き換えたい場合はcv::Mat(m, false)とする。ただし、スコープを抜けるなどしてMatx変数が解放される場合は正常動作しないだろう。たとえば関数の内部で宣言したMatxを、戻り値cv::Mat(m, false)のように返したりするのはダメ。