【问题标题】:MatToUIImage kills my app because of memory pressureMatToUIImage 由于内存压力而杀死了我的应用程序
【发布时间】:2014-02-24 00:20:34
【问题描述】:

我正在使用 opencv 并希望在处理图像时显示图像。
我的问题是,当我使用MatToUIImage 时,内存使用量增加了很多,以至于我的应用程序崩溃了。

但是我还能在这里做什么? image是视图控制器的成员,没有在方法中实例化。
也许它与processImage 作为opencv 的委托方法有关?

- (void)processImage:(cv::Mat&)img
{
   image = img;
   testImage = MatToUIImage(image);
}

【问题讨论】:

  • 我不熟悉 iOS 上的 OpenCV。 testImage 的类型是什么?
  • 类型为 UIImage。可能是 iOS 和 OpenCV 组合中的错误。
  • 我在某处看到签名是UIImage* MatToUIImage(const cv::Mat& m),所以testImage 是一个指针。你是否适当地释放了这个指针,特别是。如果它在每一帧分配?
  • 嗯,iOS 有自动引用计数,所以我不需要这样做。

标签: ios opencv uiimage reference-counting


【解决方案1】:

回复最后两个cmets:

AFAIK 引用计数和释放指针内存是不同的事情。如果你不释放指针,那么它的引用不会减少,也不会从内存中清除。无论如何,你需要释放指针。

【讨论】:

  • 我不明白这里需要做什么。我遇到了同样的问题。使用 ARC,我无法 [图片发布]。
  • 阅读此docs.opencv.org/modules/core/doc/…,如果您再次阅读答案,那就很清楚了。如果要创建在堆中创建的指针,则需要显式删除它们。或者,如果您在堆栈上创建图像,那么它们将在没有任何引用后被删除。
  • 我发现我不知道我是怎么错过的。我只需要在我的代码周围包裹一个@autoreleasepool{}。我多次使用@autoreleasepool,不知道为什么没有点击使用。
  • 天啊。 @autoreleasepool 是救生员! over_optimistic 将评论推广到答案可能是有意义的。
猜你喜欢
  • 2014-03-30
  • 2014-05-22
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
相关资源
最近更新 更多