将cv :: Mat转换为IplImage *
关于这个文件似乎非常多斑点。
我基本上有一个IplImage * s(IplImage ** imageArray)的空数组,我调用一个函数来导入一个cv :: Mats数组 – 我想把我的cv :: Mat转换成一个IplImage *可以将其复制到数组中。
目前我正在尝试这个:
while(loop over cv::Mat array) { IplImage* xyz = &(IplImage(array[i])); cvCopy(iplimagearray[i], xyz); }
这会生成段错误。
另外尝试:
while(loop over cv::Mat array) { IplImage* xyz; xyz = &array[i]; cvCopy(iplimagearray[i], xyz); }
这给我一个编译时错误: error: cannot convert 'cv::Mat*' to 'IplImage*' in assignment
坚持如何进一步,将不胜感激一些build议:)
cv::Mat
是OpenCV2.X中引入的新types,而IplImage*
是“传统”图像结构。
虽然, cv::Mat
不支持在构造函数参数中使用IplImage
,但默认的库不提供另一种方式的函数。 您将需要手动提取图像标题信息。 (请记住你需要分配IplImage结构,这在你的例子中是缺乏的)。
Mat image1; IplImage* image2=cvCloneImage(&(IplImage)image1);
猜猜这会做的工作。
编辑:如果你面对编译错误,请尝试这种方式:
cv::Mat image1; IplImage* image2; image2 = cvCreateImage(cvSize(image1.cols,image1.rows),8,3); IplImage ipltemp=image1; cvCopy(&ipltemp,image2);
(you have cv::Mat old) IplImage copy = old; IplImage* new_image = ©
你使用新的IplImage *作为最初的工作。
Personaly我认为这不是由types转换造成的问题,但缓冲区溢出问题; 这是这条线
cvCopy(iplimagearray[i], xyz);
我认为会导致段错误,我build议你确认数组iplimagearray [我]有足够的缓冲区大小来接收复制的数据
根据OpenCV 作弊表,可以这样做:
IplImage* oldC0 = cvCreateImage(cvSize(320,240),16,1); Mat newC = cvarrToMat(oldC0);
cv :: cvarrToMat函数负责转换问题。
在灰色图像的情况下,我正在使用这个function,它工作正常! 但是您必须注意function特性;)
CvMat * src= cvCreateMat(300,300,CV_32FC1); IplImage *dist= cvCreateImage(cvGetSize(dist),IPL_DEPTH_32F,3); cvConvertScale(src, dist, 1, 0);