opencv:将垫子转换为 iplImage 问题

opencv: Convert Mat to IplImage Issue

本文关键字:iplImage 问题 转换 opencv      更新时间:2023-10-16

在我的程序中,我必须混合使用 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);

最后,我必须将垫子转换回 IplImage* 才能使用 c api:

IplImage imgCaptureFrame = roi;

当我使用它作为参考时&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:slavebuildsWinInstallerMegaPacksrcopencvmodulescoresrcconvert.
cpp, line 1306

在代码中使用 C API。

当我只是使用

IplImage imgCaptureFrame = captureFrame;

而不是

IplImage imgCaptureFrame = roi;

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

我该怎么做才能将我的投资回报率转换为在 c API 中使用它?

要将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;