1、OpenCV 4.x使用C++ 11重构,原则上不建议再使用C语言的函数。
例如IplImage* img;编译会出错,如果非要使用,请新增以下红色的字体,头文件。
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc_c.h>
#include <opencv2/imgproc/types_c.h>
#include <opencv2/highgui/highgui_c.h>
2、以前OpenCV低版本的Mat和IplImage可以互相转换。但是OpenCV 4.x版本不支持了。CvvImage类库也不能用在OpenCV4。
IplImage是OpenCV中C语言的图像类型;cv::Mat是OpenCV中C++语言的图像类型;
一、Mat—>IplImage
Mat image;
if (!image.data)
{
cout<<“Could not open or find the image”<<endl;
return -1;
}
//convert to IplImage
IplImage ipl_img(image);
二、Mat—>IplImage*
IplImage *frame;
Mat Img;
frame=&IplImage(Img);
//*frame=IplImage(Img);
三、IplImage*—>Mat
IplImage* iplimg = cvLoadImage("heels.jpg");
Mat matImg;
matImg = Mat(iplimg);
3、OpenCV 4.x版本的函数cvLoadImage和cvSaveImage是真的没有提供了。
error C3861: “cvLoadImage”: 找不到标识符
......
4、CvvImage类库不能用在OpenCV4。那么OpenCV4和MFC结合,怎么显示图片?请参考教程:
MFC+Opencv4+vs2017 显示图像 详细小白教程(不使用cvvImage)
https://blog.csdn.net/guchensha/article/details/96281384
MFC OpenCV:显示图片的3种方法(详细)
https://blog.csdn.net/qq_34801642/article/details/89945082
上述两篇博客提到了使用Mat与ATL/MFC中的CImage转换的方法。该方法虽然可行,但是当图像分辨率大时,打开图片会很慢。不可取。本人自己实现了一个方法,请参见我的另一篇博客:
《我个人实现的MFC+OpenCV4+VS2017对话框打开并显示图像,还能支持ROI矩形框选》