我正在使用 OpenCV 2.2,我想知道如果返回图像,是否必须释放为图像分配的内存。我有多次从主程序调用的 method1(见下文)。它返回在方法内部创建的 IplImage。 我必须在哪里发布方法中创建的图像?如果我在返回命令之前释放它,我猜什么都不会返回? return 命令后,不再处理。那么我该如何摆脱在我的程序运行时创建的所有 dst 图像呢???
IplImage* Method1(IplImage* src) {
IplImage *dst = cvCreateImage(cvSize(src->width, src->height), IPL_DEPTH_8U, 1);
[...]
return dst;
}
谢谢!
编辑: 那么我应该这样调用这个方法吗:
IplImage* tmp;
tmp = cvCreateImage(cvSize(dst->width, dst->height), IPL_DEPTH_8U, 1);
tmp = Method1(src);
或
IplImage* tmp;
tmp = Method1(src);
之后在主程序中正确释放内存?
最佳答案
- 如果您使用的是 C++,请不要使用
IplImage*
,请使用cv::Mat
,它会自动为您管理内存。 - 您的第一个方法会造成内存泄漏(这不是 opencv 特有的 - 您为某物分配内存,然后覆盖指针,因此它现在不可访问(这意味着您有一个不执行任何操作的分配,您将永远无法访问释放它。
关于c++ - 如果返回图像,我需要 cvReleaseImage 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5661302/