1

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

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

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本身是否存在潜在问题?

4

1 回答 1

4

那是因为您正在使用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);
   }
}
于 2019-01-31T15:07:26.297 回答