C++ 如何从cv::Mat转换为CvArr?

C++ 如何从cv::Mat转换为CvArr?,c++,opencv,C++,Opencv,我花了很多时间搜索如何从cv::Mat或CvMat转换为CvArr,但没有任何收获,请在这方面帮助我,谢谢。如果我没记错的话,CvMat是一个CvArr,所以你可以将它转换成一个CvArr,现在CvArr的第一个字节告诉函数它实际上是一个CvMat: 您确定要转换它吗?有时,有一个等价的函数使用你所拥有的。例如,cvMorphologyEx正在使用CvArr,但是morphologyEx正在使用cv::Mat首先使用以下方法转换图像: IplImage* oldstyleimg = &m

我花了很多时间搜索如何从cv::Mat或CvMat转换为CvArr,但没有任何收获,请在这方面帮助我,谢谢。

如果我没记错的话,CvMat是一个CvArr,所以你可以将它转换成一个CvArr,现在CvArr的第一个字节告诉函数它实际上是一个CvMat:

您确定要转换它吗?有时,有一个等价的函数使用你所拥有的。例如,
cvMorphologyEx
正在使用
CvArr
,但是
morphologyEx
正在使用
cv::Mat

首先使用以下方法转换图像:

IplImage* oldstyleimg = &matimg.operator IplImage()

我不记得它是只为图像创建标题,还是在需要时复制,我只使用:

IplImage tmp = image;
带有Mat变量的图像

Mat img = imread("C:\MyPic.jpg",CV_LOAD_IMAGE_GRAYSCALE);
IplImage tmp=img;
cvErode(&tmp, &tmp, 0, 2);
Mat laser=&tmp;
    imshow("Eroded",laser);

我用这种方式将
cv::Mat
转换为
CvArr
。不使用
tmp
直接使用
&tmp

CvArr是传递多种类型图像数据的函数参数“方法”。它不是一个类型,而是一个元类型。所以,无论你做什么,都是你需要的。