opencv:将Mat转换为IplImage问题

时间:2014-01-05 16:02:02

标签: c++ c opencv

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

当我使用它作为参考& 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。

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

1 个答案:

答案 0 :(得分:2)

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