将 IplImage 转换为 Mat 时出错

Posted

技术标签:

【中文标题】将 IplImage 转换为 Mat 时出错【英文标题】:Error when converting IplImage to Mat 【发布时间】:2016-04-01 02:25:38 【问题描述】:
#include <opencv2/opencv.hpp>
...

IplImage* img = cvLoadImage("TestImage.jpg", 1);
Mat mtx(img);

此代码应将 img 转换为 Mat 格式。但是,当我实现它时,我收到一条错误消息“没有用于初始化 cv::Mat 的匹配构造函数”。

我哪里做错了?语法应该是正确的,所以我认为问题出在其他地方。我在 OSX Yosemite 中使用 OpenCV 3.1.0 和 Xcode 7.2.1。

提前谢谢你

【问题讨论】:

不知道为什么它不工作,但有什么原因你不能使用cv::imread(...) 因为他们在 3.0.0 中删除了该构造函数。 C api(和IplImage)到那时已经被弃用了5年,所以你没有理由使用它。正如@DanMašek 所说,您应该直接将图像读入Mat @beaker 好点,当我查看源代码时,我似乎错过了这一点。似乎有 another option ... 这很可能是一个重复的问题。 【参考方案1】:

似乎构造函数 cv::Mat(IplImages*) 已从 core/src/matrix.cpp 中消失。顺便说一句,我找到了一个替代方案。

Mat mtx = cv::cvarrToMat(img);

应该这样做。

【讨论】:

【参考方案2】:

这些也可以工作:

// Method 1
Mat mtx = img;

// Method 2 (`true` stands for whether you want a deepcopy)
Mat mtx(img, true);

【讨论】:

以上是关于将 IplImage 转换为 Mat 时出错的主要内容,如果未能解决你的问题,请参考以下文章

opencv:将iplimage转换为mat后出错

尝试在 OpenCv 中使用来自 Mat 对象的转换后的 IplImage 对象时出错

OpenCV 3.0中IplImage* 转cv::Mat

当我想将 IpLmage 转换为 mat、opencv 时遇到了一些错误

opencv中Mat数据怎么保存为JPG格式的图片

opencv:将 Mat 转换为 IplImage 问题