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 };