OpenCV cv::Mat を CvMat や IplImage と見なす
ラボメンバーのためのメモ。cv::Matクラスには CvMat 型や IplImage型への変換演算子が定義されているのでキャストできる。したがって、CvMatやIplImageしか受け付けない古いバージョンの関数を使う場合には明示的にキャストするか、もしくは以下のように暗黙の型変換によりCvMat型やIplImage型のコピーコンストラクタを呼び出す。
cv::Mat m; CvMat cvm(m); cvhoge(&cvm); IplImage img(m);
CvMatやIplImage型へのポインタを使う場合でも以下のようにキャストできる。
cv::Mat m = ... cvhoge(&static_cast<CvMat>(m)); // CvMat型へのポインタ cvhoge(&static_cast<IplImage>(m)); // IplImage型へのポインタ
なお、一時変数へのポインタはgccが警告を出すが、OpenCVの仕様上動くようだ。
ちなみに、変換演算子はconstメンバ関数であるが、変換先のCvMatやIplImageから元のデータが書き換えられるので注意。
参考基本構造体 — opencv 2.2 (r4295) documentation