C++ 没有合适的用户定义的“转换”;cv::Mat“;至;IplImage“;存在

C++ 没有合适的用户定义的“转换”;cv::Mat“;至;IplImage“;存在,c++,image,visual-studio,opencv,visual-c++,C++,Image,Visual Studio,Opencv,Visual C++,我正在尝试使用以下特征将电脑中的cv::Mat转换为IplImage: opencv:3.4.14 OS:赢10分 代码:c++ 不同选项的示例如下: cv::Mat MBin=cv::Mat::zero(cv::Size(64,64),cv_32FC1); IplImage*image0=新的IplImage(MBin); IplImage image1=MBin; IplImage*image2=cvCloneImage(&(IplImage)MBin); IplImage*image3

我正在尝试使用以下特征将电脑中的cv::Mat转换为IplImage:

  • opencv:3.4.14
  • OS:赢10分
  • 代码:c++
不同选项的示例如下:

cv::Mat MBin=cv::Mat::zero(cv::Size(64,64),cv_32FC1);
IplImage*image0=新的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(图像4和图像3);

出现imageX时产生标题错误。

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)

此外,您还可以参考此项了解更多信息。

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

#包括
Mat Img=imread(“1.jpg”);
IplImage IBin_2=cvIplImage(MBin);
IplImage*IBin=&IBin_2;

不要使用过时的C api!它是一个有几百个类的代码,我不能改变所有的C API。@ SSR不需要,只使用C++ API。