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