画像処理

処理 説明
膨張
(Dilation)
分離している領域を連結
収縮
(Erosion)
細かいノイズを除去
オープニング
(Opening)
収縮をくり返し行い、それと同じ回数の膨張を行う
クロージング
(Closing)
膨張をくり返し行い、それと同じ回数の収縮を行う

画像情報

IplImage構造体

typedef struct _IplImage
{
    int  nSize;     // IplImage構造体のサイズ
    int  ID;        // バージョン (0)

    int  nChannels; // チャンネル数
    int  depth;     // ピクセルの色深度のビット数

    int  dataOrder;   // 0:インタリーブ カラーチャンネル
                      // 1:分離カラーチャンネル

    int  origin;      // 0:左上原点
                      // 1:左下原点 (Windowsのビットマップ形式)

    int  width;       // 画像の幅 (ピクセル数)
    int  height;      // 画像の高さ (ピクセル数)

    int  imageSize;   // 画像データのバイト数

    char *imageData;  // 画像データへのポインタ
    int  widthStep;   // 画像の行のバイト数

    char *imageDataOrigin;  // オリジナル画像データへのポインタ

    struct _IplROI *roi;    // 画像ROI


    struct _IplImage    *maskROI;   // NULL
    struct _IplTileInfo *tileInfo;  // NULL
    void    *imageId;               // NULL

    int  alphaChannel;    // 未使用

    char colorModel[ 4 ]; // 未使用
    char channelSeq[ 4 ]; // 未使用

    int  align;           // 未使用

    int  BorderMode[4];   // 未使用
    int  BorderConst[4];  // 未使用

} IplImage;
IplImage - OpenCV 1.0 リファレンス - opencv.jp

画像領域の確保

画像処理した結果を格納するための、画像領域を確保します。

cvCreateImage()は、画像ヘッダの作成とデータ領域の確保をします。

IplImage* cvCreateImage(
    CvSize size,    // 画像の幅と高さ
    int depth,      // 画像の色深度
    int channels    // 画像のチャンネル数
    );
CreateImage - OpenCV 1.0 リファレンス - opencv.jp

色深度 (depth) とチャンネル数 (channels) は、格納する画像に合わせて正しく指定する必要があります。

色深度 (depth) 定数
定数 ビット数 符号 種類
IPL_DEPTH_8U 8 × 整数
IPL_DEPTH_8S
IPL_DEPTH_16U 16 ×
IPL_DEPTH_16S
IPL_DEPTH_32S 32
IPL_DEPTH_32F 32 浮動小数点数
IPL_DEPTH_64F 64
OpenCVの型情報の定数まとめ - // TODO: better name