最終更新:2016-05-24 (火) 03:20:23 (851d)  

IplImage はてなブックマークを見る
Top / IplImage

メモ

定義

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)

参考