如何在 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 的构造函数包装到此函数中。
在我之前使用的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 的构造函数包装到此函数中。