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转换(总结而来)