cvReleaseImage表面理解就是释放读取的图片的内存,对应读图片使用的是cvLoadImage。
使用cvReleaseImage后,会设置此时图片占用的内存数据为NULL,但是该内存地址不会被释放,当有新图片使用cvLoadImage读时,会放在这个被置位NULL的内存地址处,详情如下:
#include "highgui.h"
#include "OCV.h"
void openCV::debugcvReleaseImage(char imgPath[100]) {
if (imgPath == NULL) {
return;
}
IplImage* img = cvLoadImage(imgPath, 1); // 读图片
printf("%X\n", &img); //图像本身的信息
printf("%p\n", img); // 图像的存储地址
cvReleaseImage(&img); // 释放图片
printf("释放后的内存是否为NULL?:%d\n", img==NULL); // 释放图片后,内存中的数据全部为NULL
IplImage* img_ = cvLoadImage(imgPath, 1); // 再次读取一张图片
printf("%p\n", img_); // 图像的存储地址 // 被分配到了相同的内存地址
}
打印信息如下: