从“ cv :: Mat”到“ IplImage”的用户定义的转换不存在

问题描述

我正在使用此特征将PC中的cv :: Mat转换为IplImage:

  • opencv:3.4.14
  • 操作系统:Win 10
  • 代码:c ++

差异选项的示例:

cv::Mat MBin = cv::Mat::zeros(cv::Size(64,64),CV_32FC1);

IplImage* image0= new IplImage(MBin);
IplImage image1 = MBin;
IplImage* image2 = cvCloneImage(&(IplImage)MBin);

IplImage* image3;
image3 = cvCreateImage(cvSize(MBin.cols,MBin.rows),8,3);
IplImage image4 = MBin;
cvcopy(&image4,image3);

出现imageX的地方会产生标题错误

解决方法

这是唯一不会产生编译器错误的解决方案:

#include <opencv2/core/types_c.h>

Mat Img = imread("1.jpg");

IplImage IBin_2 = cvIplImage(MBin);
IplImage* IBin = &IBin_2;
,

opencv3.x之前,Mat具有构造函数Mat(const IplImage* img,bool copyData=false);。但是在opencv3.x中,Mat(const IplImage* img,bool copyData=false);构造函数被取消了。

因此,您可以参考以下示例将Mat转换为IplImage

//Mat—>IplImage
//EXAMPLE:
//shallow copy:
Mat Img=imread("1.jpg");
IplImage* pBinary = &IplImage(Img);
//For a deep copy,just add another copy of the data:
IplImage *input = cvCloneImage(pBinary)

此外,您可以参考此link以获得更多信息。