Opencv4.x中Mat與IplImage的轉換
Mat轉IPLImage
IplImage img = cvIplImage(mat);
IplImage轉Mat
//! converts array (CvMat or IplImage) to cv::Mat
Mat cvarrToMat(const CvArr* arr, bool copyData=false,
bool allowND=true, int coiMode=0,
AutoBuffer* buf=0);
Opencv3.x中Mat與IplImage的轉換
Mat轉IPLImage
IplImage img = IplImage(mat);
IplImage轉Mat
Mat mat=cvarrToMat(img);
Mat cvarrToMat(const CvArr* arr, bool copyData=false,
bool allowND=true, int coiMode=0,
AutoBuffer* buf=0);
opencv2.x中Mat與IplImage的轉換
Mat轉IPLImage
IplImage img = IplImage(mat);
IplImage轉Mat
IplImage * ipl1, * ipl2;
const cv::Mat m1 = cv::Mat(ipl);
cv::Mat m2 = ipl2;
1. IplImage
1 typedef struct _IplImage 2 { 3 int nSize; /* IplImage大小 */
4 int ID; /* 版本 (=0)*/
5 int nChannels; /* 大多數OPENCV函數支持1,2,3 或 4 個通道 */
6 int alphaChannel; /* 被OpenCV忽略 */
7 int depth; /* 像素的位深度: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U, 8 IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F 可支持 */
9
10 char colorModel[4]; /* 被OpenCV忽略 */
11 char channelSeq[4]; /* 被OpenCV忽略 */
12 int dataOrder; /* 0 - 交叉存取顏色通道, 1 - 分開的顏色通道. cvCreateImage只能創建交叉存取圖像 */
13 int origin; /* 0 - 頂—左結構,1 - 底—左結構 (Windows bitmaps 風格) */
14 int align; /* 圖像行排列 (4 or 8). OpenCV 忽略它,使用 widthStep 代替 */
15
16 int width; /* 圖像寬像素數 */
17 int height; /* 圖像高像素數*/
18
19 struct _IplROI *roi; /* 圖像感興趣區域. 當該值非空只對該區域進行處理 */
20 struct _IplImage *maskROI; /* 在 OpenCV中必須置NULL */
21 void *imageId; /* 同上*/
22 struct _IplTileInfo *tileInfo; /*同上*/
23
24 int imageSize; /* 圖像數據大小(在交叉存取格式下imageSize=image->height*image->widthStep),單位字節*/
25 char *imageData; /* 指向排列的圖像數據 */
26 int widthStep; /* 排列的圖像行大小,以字節為單位 */
27 int BorderMode[4]; /* 邊際結束模式, 被OpenCV忽略 */
28 int BorderConst[4]; /* 同上 */
29
30 char *imageDataOrigin; /* 指針指向一個不同的圖像數據結構(不是必須排列的),是為了糾正圖像內存分配准備的 */
31 } IplImage;
2.CvMat
1 typedef struct CvMat 2 { 3 int type; 4 int step; /*用字節表示行數據長度*/
5 int* refcount; /*內部訪問*/
6 union { 7 uchar* ptr; 8 short* s; 9 int* i; 10 float* fl; 11 double* db; 12 } data; /*數據指針*/
13 union { 14 int rows; 15 int height; 16 }; 17 union { 18 int cols; 19 int width; 20 }; 21 } CvMat; /*矩陣結構頭*/
3.Mat
1 class CV_EXPORTS Mat 2 { 3
4 public: 5
6 /*..很多方法..*/
7 /*............*/
8
9 int flags;(Note :目前還不知道flags做什么用的) 10 int dims; /*數據的維數*/
11 int rows,cols; /*行和列的數量;數組超過2維時為(-1,-1)*/
12 uchar *data; /*指向數據*/
13 int * refcount; /*指針的引用計數器; 陣列指向用戶分配的數據時,指針為 NULL 14
15
16 /* 其他成員 */
17 ... 18
19 };
