使用CV_BGR2HSV在cv :: cvtColor中潜在的内存泄漏

时间:2014-05-03 00:18:36

标签: c++ ios opencv memory memory-management

我在视频处理算法的上下文中反复调用CV_BGR2GRAY与CV_BGR2HSV的cv :: cvtColor时,看到iPad3上的内存使用情况截然不同,我想了解为什么会这样做或指导如何每次调用cvtColor时都要避免线性内存增长。

这是我为此问题编写的用于测试和上下文的简化代码:

- (void) processImage:(cv::Mat &)image {
    processor.process(image, output);
    image = output;
}

输出定义为此方法所在类的一部分。处理器类定义为:

class TestFrameProcessor {
public:
    cv::Mat tmp;
    cv::Scalar green;
    TestFrameProcessor(void):
        green(0,255,0) {
    }

    void process(cv:: Mat &input, cv:: Mat &output) {
        cv::cvtColor(input, tmp, CV_BGR2HSV);
        output = green;
    }
};

这段代码只是为了说明我没有做任何有价值的事情。当我使用CV_BGR2GRAY作为转换类型时,我得到一个像这样的内存配置文件:

Memory profile when using CV_BGR2GRAY

最大值约为21 MB,平均值约为10 MB。

当我使用CV_BGR2HSV时,我得到一个像这样的内存配置文件:

Memory profile when using CV_BGR2HSV

峰值约为225 MB,最小值约为12 MB。我关注的是使用BGR2HSV转换时内存使用量的线性增长。在这个特定的运行中,似乎在OpenCV中发生了内存清理,但是我已经运行了(没有得到配置文件的屏幕上限)内存增长无限制,直到所有系统内存用完并且应用程序死了不合时宜的死亡。

问题是:

  • 我在这里滥用了cv :: Mat对象或cvtColor吗?我应该致电发布吗?
  • 有没有人在使用cvtColor之前看过这种类型的内存使用情况?
  • 如果有,有办法避免吗?
  • OpenCV实现cvtColor是否存在已知的内存问题?

(我希望其他人知道答案或者比我显然有更好的GoogleFu技能)

0 个答案:

没有答案