我在视频处理算法的上下文中反复调用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作为转换类型时,我得到一个像这样的内存配置文件:
最大值约为21 MB,平均值约为10 MB。
当我使用CV_BGR2HSV时,我得到一个像这样的内存配置文件:
峰值约为225 MB,最小值约为12 MB。我关注的是使用BGR2HSV转换时内存使用量的线性增长。在这个特定的运行中,似乎在OpenCV中发生了内存清理,但是我已经运行了(没有得到配置文件的屏幕上限)内存增长无限制,直到所有系统内存用完并且应用程序死了不合时宜的死亡。
问题是:
(我希望其他人知道答案或者比我显然有更好的GoogleFu技能)