将 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 中使用来自 Mat 对象的转换后的 IplImage 对象时出错