最終更新:2019-06-17 (月) 18:03:39 (1774d)
IplImage
Top / IplImage
メモ
- IplImage, CvMat, CvMatND? という画像(行列)を表す型は、OpenCV 2.0以降はcv::Matという1つのクラスにまとめられました。
定義
typedef struct _IplImage { int nSize; /* sizeof(IplImage) */ int ID; /* バージョン (=0)*/ int nChannels; /* OpenCV のほとんどの関数が,1,2,3および4チャンネルをサポートする */ int alphaChannel; /* OpenCV では無視される */ int depth; /* ピクセルの色深度のビット数: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U, IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F, IPL_DEPTH_64F がサポートされる */ char colorModel[4]; /* OpenCV では無視される */ char channelSeq[4]; /* 同上 */ int dataOrder; /* 0 - インタリーブカラーチャンネル.1 - 分離カラーチャンネル, cvCreateImage が作成できるのは,インタリーブ画像のみ.*/ int origin; /* 0 - 左上原点, 1 - 左下原点(Windowsのビットマップ形式) */ int align; /* 画像の行のアライメント(4 あるいは 8). OpenCV はこれを無視して,代わりに widthStep を使用する. */ int width; /* 画像のピクセル幅 */ int height; /* 画像のピクセル高さ */ struct _IplROI *roi;/* 画像 ROI.これが NULL でない場合,この特定の領域が処理の対象となる */ struct _IplImage *maskROI; /* OpenCV では必ずNULL */ void *imageId; /* 同上 */ struct _IplTileInfo *tileInfo; /* 同上 */ int imageSize; /* 画像データのバイトサイズ (インタリーブデータの場合は,=image->height*image->widthStep) */ char *imageData; /* アライメントが調整された画像データへのポインタ */ int widthStep; /* アライメントが調整された画像の行のバイトサイズ */ int BorderMode[4]; /* 画像境界の設定.OpenCV では無視される */ int BorderConst[4]; /* 同上 */ char *imageDataOrigin; /* オリジナル画像データへのポインタ (アライメントが調整されているとは限らない) - これは画像を正しく解放するために必要. */ } IplImage;
メンバ
色深度? depth
- IPL_DEPTH_8U? - 8ビット符号なし整数
- IPL_DEPTH_8S? - 8ビット符号あり整数
- IPL_DEPTH_16U? - 16ビット符号なし整数
- IPL_DEPTH_16S? - 16ビット符号あり整数
- IPL_DEPTH_32U? - 32ビット符号なし整数
- IPL_DEPTH_32S? - 32ビット符号あり整数
- IPL_DEPTH_32F - 単精度浮動小数点数
- IPL_DEPTH_64F? - 倍精度浮動小数点数
アドレス
(x,y)=imageData + (widthStep *y) + (x * bpp)
- bpp = Bytes Per Pixel
widthStep
- 画像の水平方向1ライン分をバイト単位で表す値
- メモリのアライメント(alignment)により,width と同じか, それよりも大きい値となる.
値の範囲
- IPL_DEPTH_8U? => 0 -- 255
- IPL_DEPTH_16U? => 0 -- 65535
- IPL_DEPTH_32F => 0 -- 1.0
cvCreateImage( cvSize(320,240), IPL_DEPTH_8U, 3)の場合
- unsignedの8bitなのでunsigned char
((unsigned char*)(img->imageData + img->widthStep*y))[x*3] //B 青 ((unsigned char*)(img->imageData + img->widthStep*y))[x*3 + 1] //G 緑 ((unsigned char*)(img->imageData + img->widthStep*y))[x*3 + 2] //R 赤
OpenCvSharp
関連
- IPL (Intel Image Procesing Library)