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