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矩形框选》