OpenCV 2.0 – cv::Mat

OpenCV C++ matrix class

前回、OpenCV 2.0 – cv::Ptr ではスマートポインタである cv::Ptr について調べました。
今回はOpenCV 2.0のC++インタフェースの中でも重要な役割を持つ cv::Mat クラスについて。
このクラスは従来の IplImage 及び CvMat に取って代わるものになっていますが、
かなり大きいクラスなので何回かに分けて調べていきたいと思います。

cv::Mat はマルチチャンネルとROI(Region Of Interest)をサポートしている二次元行列です。
オブジェクトの生成方法は複数ありますが、ここでは基本的な方法から紹介します。

次はMatクラスの構造について。
gdbで上のコードのmatAを見てみると、

flags //
rows 行数
cols 列数
step 一行のバイト数
data データへのポインタ
refcount 参照カウントへのポインタ
datastart データの始まりへのポインタ
dataend データの終わりへのポインタ

メンバは基本的にCvMatと同様のものを備えています。
flagsはMatクラスの各メソッドで内部的に利用されているものなので特に気にしなくて構いません。
また、サイズはIplImageと比べるとかなり小さく、sizeofしてみるとIplImageは112、Matは32となっています。

各要素のアドレスは以下のように計算します。

とりあえず今回はcv::Matクラスの構造を主に紹介しました。
次からは実際にこのクラスを利用していろいろな処理を行いたいと思います。

:: 追記
* IplImage, CvMat と cv::Mat の互換性について
とりあえず、ドキュメントに載っていたコードを使って確認を行いました。

関連記事:
OpenCV 2.0 – cv::Ptr
OpenCV 2.0を試してみた

あわせて読む:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です