c++ - 如果返回图像,我需要 cvReleaseImage 吗?

标签 c++ opencv memory-management

我正在使用 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);

之后在主程序中正确释放内存?

最佳答案

  1. 如果您使用的是 C++,请不要使用 IplImage*,请使用 cv::Mat,它会自动为您管理内存。
  2. 您的第一个方法会造成内存泄漏(这不是 opencv 特有的 - 您为某物分配内存,然后覆盖指针,因此它现在不可访问(这意味着您有一个不执行任何操作的分配,您将永远无法访问释放它。

关于c++ - 如果返回图像,我需要 cvReleaseImage 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5661302/

相关文章:

c++ - 带有 boost::zip_iterator 的 std::for_each 编译失败

c++ - 透过透明物体看不到天空盒

C++ 函数练习 - 不断返回零

c++ - 如何在 C++ 中查找程序的类名和标题?

python - OpenCV cv2.moments将所有时刻返回零

Java Opencv connectedComponentsWithStats

java - 服务器JVM不保留内存

python - 使用 opencv 为 python 中的 OCR 准备适当的图像阈值

iphone - Xcode 生成的 Core Data 托管对象,是否需要添加 dealloc 方法来释放变量?

ios - 自动释放池 block