【问题标题】:Why OpenCV Mat creates memory leaks?为什么 OpenCV Mat 会造成内存泄漏?
【发布时间】:2019-01-28 11:39:13
【问题描述】:

不确定这是否相关,但我在我的项目中使用opencv4nodejs,并且我确实在这种情况下运行,如果我不在每个 Mat 对象上调用.release(),内存消耗就会增加~ 10MB/秒。

这个简单的示例代码将解决问题。

function loop(camera, display)
{
    let mat = camera.read();

    let grey_mat = mat.bgrToGray();

    loop(camera, display);
}

因为,这个解决了问题:

function loop(camera, display)
{
    let mat = camera.read();

    let grey_mat = mat.bgrToGray();

    grey_mat.release();

    mat.release();

    loop(camera, display);
}

如果我搜索 OpenCV Mat 对象导致泄漏的原因,我会得到答案,人们说 Mat 能够自行处理内存使用。

如果最后一句话是真的,我做错了什么?如果我没有做错任何事,为什么我必须明确告诉 Mat 对象释放它的内存?或者,npm 模块opencv4nodejs 本身是否存在潜在问题?

【问题讨论】:

    标签: node.js opencv mat opencv4nodejs


    【解决方案1】:

    那是因为您使用的是recursion。在函数结束时,您再次调用loop,因此它会在每次递归时堆叠这些Mat 的新实例。对象 mat 和 gray_mat 永远不会被销毁,如果您要从函数很难返回,它们会被销毁。

    如果您更改 iterative 的循环,您应该不会再遇到问题,因为函数每次都会返回并且垫子会被破坏。

    function doLoopWork(camera, display)
    {
        let mat = camera.read();
    
        let grey_mat = mat.bgrToGray();
    }
    
    function loop(camera, display) 
    {
        while (1) {
          doLoopWork(camera, display);
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-11
      • 2019-09-08
      • 2011-06-17
      • 1970-01-01
      • 2017-07-01
      • 2011-10-25
      • 2016-01-17
      • 2014-05-13
      • 1970-01-01
      相关资源
      最近更新 更多