如何在 OpenCV 3.0 中将 Mat 转换为 cvMat

How to convert Mat to cvMat in OpenCV 3.0

如何将 OpenCV Mat 对象转换为 cvMat 对象?

根据此 OpenCV 互操作性文档 (1),这种转换应该是可能的。但是在声明 cvMat 时,编译器在第 cvMat deprecatedImg

行给出了以下错误消息

: error: < expected ‘;’ before ‘deprecatedImg’ >,

如何解决这个问题?

在 OpenCV 3 及更高版本中,您必须使用兼容性 headers(types_c.h) 才能使用已弃用的 C objects,如 cvMat。在 OpenCV 3.0 中,CvMat 有一个接受 Mat(1) 的构造函数。代码如下。

#include "opencv2/core/types_c.h"
cv::Mat img = ... ;
CvMat deprecatedImg(img);

在 OpenCV 2.4.* 及以下版本中,MatCvMat 转换运算符 (2) 存在,您可以简单地将 Mat 分配给 CvMat 如下。请注意,此转换运算符在 OpenCV 3 及更高版本中不再存在。

Mat img = ...;
CvMat cvMatImg = img;