OpenCV 圖像處理學習筆記(一)

解讀IplImage結構編程

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_16U,
IPL_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;
windows

圖像的通道指是什麼?圖像的通道指的是什麼?是否是灰度圖的通道數爲1,彩色圖的通道爲3?數據結構

正確!函數

基本上,描述一個像素點,若是是灰度,那麼只須要一個數值來描述它,就是單通道。
若是一個像素點,有RGB三種顏色來描述它,就是三通道。
指針

(2) 對於2通道和4通道如何看待?哪位幫忙解釋一下?內存

兩通道暫時沒見過,估計只是編程的方便吧!windows的bmp有時候是一個四通道圖像,R、G、B加上一個A通道,表示透明度it

是的,最後這個,通常叫作alpha通道,表示透明度的。map

4通道一般爲RGBA,在某些處理中可能會用到。channel

重要結構元素說明:im

depth和nChannels

nChannels是通道數,爲1,2,3,4

depth表明顏色深度,使用的是一下定義的宏

depth的宏定義: IPL_DEPTH_8U,無符號8bit整數(8u) IPL_DEPTH_8S,有符號8bit整數(8s) IPL_DEPTH_16S,有符號16bit整數(16s) IPL_DEPTH_32S,有符號32bit整數(32s) IPL_DEPTH_32F,32bit浮點數,單精度(32f) IPL_DEPTH_64F,64bit浮點數,雙精度(64f)

相關文章
相關標籤/搜索