1. 程式人生 > >OpenCV中IplImage影象格式與BYTE影象資料的轉換

OpenCV中IplImage影象格式與BYTE影象資料的轉換

OpenCV中IplImage影象格式與BYTE影象資料的轉換

IplImage* iplImage;

BYTE* data;

1 由IplImage*得到BYTE*影象資料:

data = iplImage->imageDataOrigin; //未對齊的原始影象資料

或者

data = iplImage->imageData; //已對齊的影象資料

2 由BYTE*得到IplImage*影象資料

iplImage = cvCreateImageHeader(cvSize(width,height),depth,channels);

cvSetData(iplImage,data,step);

首先由cvCreateImageHeader()建立IplImage影象頭,制定影象的尺寸,深度和通道數;然後由

cvSetData()根據 BYTE*影象資料指標設定IplImage影象頭的資料資料,其中step指定該IplImage影象

每行佔的位元組數,對於1通道的 IPL_DEPTH_8U影象,step可以等於width。

1,如果是從新創造一個Iplimage,則用IplImage* cvCreateImage( CvSize size, int depth, int

channels ),它建立頭並分配資料。

 

注:當不再使用這個新影象時,要呼叫void cvReleaseImage( IplImage** image )將它的頭和影象數

據釋放!

 

2,如果有影象資料沒有為影象頭分配儲存空間(即,沒有為IplImage*指標分配動態儲存空間),則

先呼叫IplImage* cvCreateImageHeader( CvSize size, int depth, int channels )建立影象頭,再

呼叫void cvSetData( CvArr* arr, void* data, int step )指定影象資料,可以理解為將這個新圖

像的資料指標指向了一個已存在的影象資料上,不存在影象資料儲存空間的分配操作。

 

注:當不再使用這個新影象時,要呼叫void cvReleaseImageHeader( IplImage** image )將它的影象

頭釋放!

 

3,如果有影象資料也有影象頭(用於IplImage為靜態分配儲存空間的情況),則先呼叫IplImage*

cvInitImageHeader( CvSize size, int depth, int channels )更改影象頭,再呼叫void

cvSetData( CvArr* arr, void* data, int step )指定影象資料。