IplImage

pamxy發表於2013-07-07

轉自:ICVL

typedef struct _IplImage
{
int nSize; /* IplImage大小 */
int ID; /* 版本 (=0)*/
int nChannels; /* 大多數OPENCV函式支援1,2,3 或 4 個通道 */
int alphaChannel; /* 被OpenCV忽略 */
int depth; /* 畫素的位深度: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16UIPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F 可支援 */
char colorModel[4]; /* 被OpenCV忽略 */
char channelSeq[4]; /* 同上 */
int dataOrder; /* 0 - 交叉存取顏色通道, 1 - 分開的顏色通道. cvCreateImage只能建立交叉存取影象 */
int origin; /* 0 - 頂—左結構, 1 - 底—左結構 (Windows bitmaps 風格) */
int align; /* 影象行排列 (4 or 8). OpenCV 忽略它,使用 widthStep 代替 */
int width; /* 影象寬畫素數 */
int height; /* 影象高畫素數*/
struct _IplROI *roi;/* 影象感興趣區域. 當該值非空只對該區域進行處理 */
struct _IplImage *maskROI; /* 在 OpenCV中必須置NULL */
void *imageId; /* 同上*/
struct _IplTileInfo *tileInfo; /*同上*/
int imageSize; /* 影象資料大小(在交叉存取格式下imageSize=image->height*image->widthStep),單位位元組*/

char *imageData; /* 指向排列的影象資料 */
int widthStep; /* 排列的影象行大小,以位元組為單位 */
int BorderMode[4]; /* 邊際結束模式, 被OpenCV忽略 */
int BorderConst[4]; /* 同上 */
char *imageDataOrigin; /* 指標指向一個不同的影象資料結構(不是必須排列的),是為了糾正影象記憶體分配準備的 */
}IplImage;


IplImage結構來自於 Intel Image Processing Library(是其本身所具有的)。OpenCV 只支援其中的一個子集:

alphaChannel 在OpenCV中被忽略。
colorModel 和channelSeq 被OpenCV忽略。OpenCV顏色轉換的唯一函式 cvCvtColor把原影象的顏色空間的目標影象的顏色空間作為一個引數。
dataOrder 必須是IPL_DATA_ORDER_PIXEL (顏色通道是交叉存取),然而平面影象的被選擇通道可以被處理,就像COI(感興趣的通道)被設定過一樣。
align 是被OpenCV忽略的,而用 widthStep 去訪問後繼的影象行。
不支援maskROI 。處理MASK的函式把他當作一個分離的引數。MASK在 OpenCV 裡是 8-bit,然而在 IPL他是 1-bit。
tileInfo 不支援。
BorderMode和BorderConst是不支援的。每個 OpenCV 函式處理畫素的鄰近的畫素,通常使用單一的固定程式碼邊際模式。
除了上述限制,OpenCV處理ROI有不同的要求。要求原影象和目標影象的尺寸或 ROI的尺寸必須(根據不同的操作,例如cvPyrDown 目標影象的寬(高)必須等於原影象的寬(高)除以2 ±1)精確匹配,而IPL處理交叉區域,如影象的大小或ROI大小可能是完全獨立的。