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