node.js - 为什么 OpenCV Mat 会造成内存泄漏?

标签 node.js opencv mat

不确定这是否相关,但我正在为我的项目使用 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 本身是否存在潜在问题?

最佳答案

那是因为你正在使用递归。在函数的末尾,您再次调用 loop 以便它在每次递归时堆叠这些 Mat 的新实例。对象 mat 和 grey_mat 永远不会被销毁,如果您要从函数 tough 返回,它们就会被销毁。

如果您为某些迭代更改循环,您应该不会再遇到这个问题,因为函数每次都会返回并且垫子会被销毁。

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

    let grey_mat = mat.bgrToGray();
}

function loop(camera, display) 
{
    while (1) {
      doLoopWork(camera, display);
   }
}

关于node.js - 为什么 OpenCV Mat 会造成内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54401205/

相关文章:

c++ - 使用 OpenCV 在 C++ 中将 std::list 转换为 cv::Mat

node.js 和 npm v3 : How to add Travis tests compatible peerDependencies in package. json

javascript - "No response has been set. Is this being used in an async call that was not returned as a promise to the intent handler?"使用js

Node.js:高效读取一系列行

c++ - 如何从 cv::Vec3f 转换为 float 类型?

c++ - OpenCV calibrateCamera 断言失败

opencv - 设置Mat,opencv的特定像素值

c++ - 如何获取 OpenCV getGaussianKernel 返回的 Mat 的实际核值?

node.js - Azure AD - 检查安全组成员身份 -(Node.js、passport、Azure Web App)

python - 改进文本区域检测(OpenCV、Python)