opencv:将 Mat 转换为 IplImage 问题

Posted

技术标签:

【中文标题】opencv:将 Mat 转换为 IplImage 问题【英文标题】:opencv: Convert Mat to IplImage Issue 【发布时间】:2014-01-05 16:02:01 【问题描述】:

在我的程序中,我必须稍微混合一下 c++ 和 c api。

我使用 c api 捕获图像并获得一帧:

CvCapture* capture = 0; 
capture = cvCaptureFromCAM(0);

// some code

IplImage* image = cvQueryFrame(capture);

然后将其转换为Mat 以兼容新的c++ api,我得到一个投资回报率:

Mat captureFrame = cvarrToMat(image);

// some code

Mat roi = captureFrame(roiRect);

最后我必须将 Mat 转换回 IplImage* 以使用 c api:

IplImage imgCaptureFrame = roi;

当我使用它作为参考时,我得到一个

OpenCV Error: Assertion failed (svec[j].size == dst.size && svec[j].depth() == d
st.depth() && svec[j].channels() == 1 && i < dst.channels()) in unknown function
, file C:\slave\builds\WinInstallerMegaPack\src\opencv\modules\core\src\convert.
cpp, line 1306

在代码中使用 c api。

当我刚刚使用时

IplImage imgCaptureFrame = captureFrame;

而不是

IplImage imgCaptureFrame = roi;

没有任何错误,但我没有我的投资回报率。

如何将我的 roi 转换为在 c api 中使用它?

【问题讨论】:

失败的断言是什么?你有描述吗? 添加错误信息。 this answer 有用吗? 【参考方案1】:

要将IplImage* 转换为cv::Mat 并制作独立副本,请执行以下操作:

cv::Mat captureFrame = cv::Mat(image, true);

要为captureFrame 创建投资回报率,您可以执行以下操作:

cv::Rect roi;
roi.x = 165;
roi.y = 50;
roi.width = 440;
roi.height = 80;

cv::Mat cropped = new cv::Mat(captureFrame, roi);

最后,以另一种方式进行转换:

IplImage imgCaptureFrame = cropped;

【讨论】:

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

从 Mat 元素到 IplImage 的 opencv 转换 *

将 c++ opencv IplImage imageData 和 widthStep 转换为 android opencv Mat

将 IplImage 转换为 Mat 时出错

opencv中Mat与IplImage,CVMat类型之间转换

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

opencv编程中cvMat到Mat如何进行数据转换?