OpenCV2:Mat

1 创建Mat对象的几种方法

    根据参考资料[1],下面列出一些创建Mat对象的方法。

1.1 Mat::Mat(int rows, int cols, int type)

Mat img(h, w, CV_32FC1);
解析:创建一个Mat对象img,宽高分别为w,h,数据类型为32位浮点数,单通道,并且为img.data分配内存。


1.2 Mat::Mat(int rows, int cols, int type, const Scalar& s)

Mat img(h, w<span style="font-family: Arial, Helvetica, sans-serif;">,  CV_32FC1,  cv::Scalar(100));</span>
解析:创建一个Mat对象img,宽高分别为w,h,数据类型为32位浮点数,单通道;为img.data分配内存,初始值为100。


1.3 Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)

Mat img(h, w,  CV_32FC1, (void*)img_data);
解析:创建一个Mat对象img,宽高分别为w,h,数据类型为32位浮点数,单通道;img.data的位置为img_data。

1.4 小结

    除了1.1和1.2在创建对象时都会根据图像的大小分配内存,而这部分内存有时候我们是不需要的,因为图像的数据我们自定义保存在其它地方。这时候可以使用1.3的方法。

2 与IplImage及CvMat之间的转换

2.1 IplImage->Mat

IplImage* img = cvLoadImage("greatwave.jpg", 1);
Mat mtx(img); // convert IplImage* -> Mat

2.2 Mat->IplImage

Mat imgMat;
IplImage pImg= IplImage(imgMat);

2.3 Mat->CvMat

Mat mtx;
CvMat oldmat = mtx; // convert Mat -> CvMat

参考资料

[1]Basic Structures:Mat

[2]OpenCV Mat数据类型及位数总结 

[3][ OpenCV参考手册之Mat类详解2]

[4]关于opencv中Mat类型转换的一个问题

[5]CvArr、Mat、CvMat、IplImage、BYTE转换(总结而来)

你可能感兴趣的:(OpenCV2:Mat)