IplImageを作成する
OpenCVがXcode上、iPhoneシミュレータで動くようになったのでいろいろと試していこう。
OpenCV上で画像データを格納するための型は現時点(ver2.4.2)で大きく二つある。
- IplImage構造体
OpenCV開始当初から用意されているCの構造体。殆どの画像操作関数はこの構造体を受取る。
- cv::Matクラス
OpenCV2.0以降追加されたC++のクラス。IplImageと相互変換ができるようになっている。cvは名前空間。
書籍やネット上の情報を見ているとIplImageとcv::Matの情報が混在しており、どちらを使ってよいか分からない。C++のコンストラクタ/デストラクタに対応したcv::Matクラスがお勧めらしいのだが、呼び出すのはObjective-Cからであり、そうなのではあればC++よりもCの方がいいかなぁと。
あと、IplImageは先達の方々に充分に使い込まれお手本が多いのも魅力だ。
なので私はC++に拘らず、まずはIplImageを使うことを覚えてその上でcv::MatクラスではないとできないことがあればIplImageから変換して使うというスタンスで行こうと思う。
IplImageを生成する
IplImageは構造体なので自体は作るのは簡単だがイメージを作るために最低限必要な情報(画像の大きさ、1pxのビット深度、レイヤ数)を与える関数が用意されているのでそれを使う。
//IplImageを生成 IplImage* iplimage = cvCreateImage(cvSize(image.size.width,image.size.height), IPL_DEPTH_8U, 4 ); //不要になったら必ずリリース cvReleaseImage(&iplimage); //IplImageを画像ファイルから生成 iplimage = cvLoadImage("icebraker.png", CV_LOAD_IMAGE_ANYCOLOR); //不要になったら必ずリリース cvReleaseImage(&iplimage);
C++のようにデストラクタもないしARCも効かないので使い終わったIplImageは必ずリリースする必要がある。