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

Posted

技术标签:

【中文标题】如何从 cv::Mat 转换为 CvArr?【英文标题】:how to convert from cv::Mat to CvArr? 【发布时间】:2012-04-22 16:25:41 【问题描述】:

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

【问题讨论】:

CvArr 是一个函数参数“方法”,用于传递多种类型的图像数据。它不是类型,而是元类型。所以,无论你做什么,你需要的都是 cvMat。 【参考方案1】:
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

【讨论】:

【参考方案2】:

当我需要这样做时,我只需使用:

IplImage tmp = image;

图像是一个 Mat 变量。

【讨论】:

【参考方案3】:

如果我没记错的话,CvMat 是一个 CvArr,所以你可以将它转换成一个 CvArr,现在 CvArr 的第一个字节告诉函数它实际上是一个 CvMat: http://opencv.willowgarage.com/documentation/basic_structures.html#cvarr

【讨论】:

【参考方案4】:

您确定要转换它吗?有时有等效的功能可以使用您所拥有的功能。例如cvMorphologyEx 使用的是CvArr,但morphologyEx 使用的是cv::Mat

【讨论】:

【参考方案5】:

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

IplImage* oldstyleimg = &matimg.operator IplImage()

我不记得它是只为图像创建标题还是复制

【讨论】:

以上是关于如何从 cv::Mat 转换为 CvArr?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 c++ 接口 cv::Mat 转换为 c IplImage?

如何将 cv::Mat 类型从 CV_16UC1 转换为 CV_8UC1

将 Magick::Image 转换为 cv::Mat

如何将从 C++ 发送的 cv::MAT 字节数组转换为 Java 中的位图?

如何将单个图像从图像矢量复制到临时 cv::Mat?

如何正确将 cv::Mat 转换为 CV_8UC1?