C++ 使用cv_BGR2HSV的cv::cvtColor中存在潜在内存泄漏
在视频处理算法的上下文中,使用cv_BGR2GRAY和cv_BGR2HSV反复调用cv::cvtColor时,我发现iPad3上的内存使用情况有着根本不同,我想了解一下这是为什么,或者如何避免每次调用cvtColor时出现线性内存增长 以下是我为测试和本问题中的上下文编写的简化代码:C++ 使用cv_BGR2HSV的cv::cvtColor中存在潜在内存泄漏,c++,ios,opencv,memory,memory-management,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; } 输
- (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作为转换类型时,我得到如下内存配置文件:
最大值约为21MB,平均值约为10MB
当我使用CV_BGR2HSV时,我会得到如下内存配置文件:
峰值约为225 MB,最小值约为12 MB。我关心的是使用BGR2HSV转换时内存使用量的线性增长。在这个特定的运行中,OpenCV中似乎发生了内存清理,但是我也有过这样的运行(没有获得配置文件的屏幕上限),内存无限增长,直到所有系统内存都用完,应用程序以不正常的方式死亡
问题是:
- 我是否误用了cv::Mat对象或cvtColor?我应该叫释放吗
- 有没有人在使用cvtColor之前见过这种类型的内存使用情况李>
- 如果是,有没有办法避免
- OpenCV实现cvtColor是否存在已知内存问题
(我希望其他人知道答案,或者拥有比我更好的谷歌搜索技能)这样的讨论应该直接进行到合适的人可以给予你关注的地方。结果发现,这是iOS OpenCV摄像头捕获代码的内存问题,而不是cvtColor。一旦我从使用OpenCV版本切换到本机AVCaptureSession并手动管理图像数据,内存问题就消失了。