如何在 OpenCV3.0 中将 CvMat* 转换为 cv::Mat

How to convert CvMat* to cv::Mat in OpenCV3.0

在我之前使用的opencv2.4.10中,从CvMat*到cv::Mat的转换可以如下完成。

CvMat *src = ...;
cv::Mat dst;
dst = cv::Mat(src);

但是在opencv3.0中rc1不能这样转换。 在某些网站中,可以按如下方式进行此转换。

CvMat* src = ...;
cv::Mat dst;
dst = cv::Mat(src->rows, src->cols, src->type, src->data.*);

如果 src 的类型是 'float',最后一个参数是 'src->data.fl'。

为什么cv::Mat的构造函数减少了? 或者有一些关于从 CvMat* 到 cv::Mat 的转换的方法吗?

为了将 CvMat* 转换为 Mat,您必须这样做:

cv::Mat dst(src->rows, src->cols, CV_64FC1, src->data.fl);
CvMat* matrix;
Mat M0 = cvarrToMat(matrix);

OpenCV 提供了这个函数而不是 Mat(matrix)。

注意:在 OpenCV 3.0 中,他们将所有将 old-style 结构(cvmat、IPLImage)转换为 new-style Mat 的构造函数包装到此函数中。