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
参考资料