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 )指定影象資料。