问题标签 [opencv4nodejs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
610 浏览

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

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

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

其中,这个解决了问题:

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

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

0 投票
3 回答
9964 浏览

node.js - 如何在 OpenCV 相机中禁用缓冲区?

我有这种情况,我使用 OpenCV 来检测镜头前的人脸并在这些人脸上进行一些 ML。我遇到的问题是,一旦我完成了所有处理,然后去抓取下一帧,我就会得到过去,而不是现在。意思是,我将读取缓冲区内的内容,而不是实际在相机前面的内容。因为在处理过程中我不在乎哪些面孔出现在镜头前,所以我关心现在在镜头前的是什么。

我确实尝试将缓冲区大小设置为1,这确实有很大帮助,但我仍然会获得至少 3 次缓冲区读取。将 FPS 设置为 1,也无助于 100% 消除这种情况。贝娄是我的流程。

我的问题是:

是否可以一起删除缓冲区?如果是这样,如何。如果没有,why将不胜感激。

0 投票
0 回答
424 浏览

javascript - opencv - 从图像中检测线(检测网格)

我想从图像中提取网格,以便能够测量从同一相机拍摄的其他照片上的“事物”。每个方格之间的距离为 1 米。我可以检测线(不完美)我需要帮助以获得更清晰的线,并且还需要以像素为单位获取交点坐标,作为数组。

这里是处理后的图像https://ibb.co/Hn6WYz5 和结果的屏幕截图 https://ibb.co/bgpmDpm

这是我的代码

0 投票
0 回答
209 浏览

node.js - 从视频中提取单个帧作为缓冲区

我正在尝试使用 node.js 中的 tensorflow 处理视频(即在服务器上 - 我没有网页)。我需要单独处理视频中的每一帧。我看到有些人正在使用 ffmpeg 从视频中生成单个图像文件,但这似乎很浪费,因为它会在文件系统上创建文件。我更愿意在内存中将每一帧作为 base64 字符串抓取。我已经使用 OpenCV4Node 完成了这项工作,但我想知道是否有更轻量级的解决方案。有人已经这样做了吗?任何帮助,将不胜感激 :-)

0 投票
1 回答
263 浏览

javascript - 如何使用 opencv4nodejs 设置矩阵区域

问题

在opencv4nodejs中设置矩阵区域的最快方法是什么?

问题

我将源图像覆盖到更大的目标图像中,其尺寸仅为数千。

在 Python 中,我将获取/设置匹配大小的区域:

但我不确定如何在 Javascript 中执行此操作。

我尝试了一些方法,但即使是最快的方法也非常慢。


例如,我有:

  • source_mat 列:2929,行:2049
  • dest_mat 列:300​​0,行:6000
  • offset_x:150, offset_y:150

将矩阵转换为数组,循环行和列,设置 dest 像素大约需要 12 秒

将两者都转换为数组,循环遍历行,拼接 cols 需要 82 秒:

替换区域根本不起作用,抛出一个生命周期错误,没有额外的日志记录:

使用setAt()andatRaw()是迄今为止最快的 8 秒:

我查看了文档,很惊讶地发现这不是一个常见的用例。节点/电子环境是否会减慢原本快速的操作?

0 投票
1 回答
1693 浏览

opencv - 使用 opencv4nodejs 将画布 ImageData(Uint8ClampedArray)转换为 openCV 矩阵(BRG 或灰色)

我想使用 opencv4nodejs npm 包将画布 ImageData(Uint8ClampedArray 类型)转换为图像矩阵。

https://www.npmjs.com/package/opencv4nodejs

https://github.com/justadudewhohacks/opencv4nodejs#readme

github README 清楚地解释了如何将图像矩阵转换为画布 ImageData,但它没有显示相反使用什么方法。

我想知道如何将灰度画布 ImageData 转换为 matGRAY。(或将 rgba ImageData 转换为 BGR 矩阵)。任何一种策略都会对我很有帮助!我还没有找到其他文档。

目标:

0 投票
0 回答
600 浏览

reactjs - 将 opencv4nodejs 导入 React App.js 会引发 TypeError

我正在尝试在我的 React 应用程序中使用 opencv4nodejs 模块。

具有 12 个 CPU 的 Ubuntu 18.04.3 LTS

当我安装在我的应用程序目录中时,我有一个看似成功的自动构建

npm install --save opencv4nodejs

opencv 模块确实已添加到我的 node_modules 文件夹中,并且“opencv4nodejs”已正确添加到我的 package.json 文件中,作为我的 React 应用程序中的依赖项(使用 create-react-app@3.0.1 创建)

但是,如果我尝试将模块导入我的 App.js 文件,则会引发 TypeError。

import cv from "opencv4nodejs";

整个错误输出附加TypeErrorOpenCV.txt

自动构建文件的完整终端输出为 opencvAutoBuildTerminalOutput.txt更多AutoBuildOpenCVtermoutput.txt

这是 Autobuild 完成期间结束的 WARN 行。

我尝试通过将这些添加到 package.json 中的依赖项来自己安装对等依赖项,但是这给 eslint 带来了问题,因为实际上安装了一个 eslint,但不知何故未被识别。缺少对等依赖项是否会导致我的错误?

以下是 AutoBuild 输出中包含字符串“Fail”的行。

这是包含“未找到”的 Autobuild 行

这是来自 AutoBuild 的一般信息

0 投票
0 回答
377 浏览

opencv - 使用 Open CV 识别深色矩形 - Node.js

我正在尝试使用 Open CV 进行一些图像识别。我想在一款名为《暗黑破坏神 2》的游戏中检测黑色矩形的位置。

在检测到矩形的位置后,我将使用 OCR 提取该矩形的文本。

我已经使用 Photoshop 准备了一些示例,说明这些矩形的位置。在左边你可以看到游戏截图,在右边我用红色矩形指出了黑色矩形,这就是我想用 OpenCV 检测的地方。

暗黑破坏神2 - 矩形识别

我应该使用哪种 OpenCV 方法来检测那些深色矩形?

我不确定 Open CV 是否能够进行这种模式识别,如果有人能指出如何做到这一点,那就太好了。

0 投票
1 回答
1320 浏览

node.js - 错误:opencv4nodejs linux 缺少模块

我正在尝试在我的项目中使用 opencv4nodejs。

  1. 在 Windows 中,这工作正常
  1. 在 Linux 中,我收到以下错误,

    找不到 ../node_modules/opencv4nodejs/build/Release/opencv4nodejs

我确实尝试手动安装模块 opencv4nodejs,在添加包时收到消息。我正在按照以下方式运行它

0 投票
1 回答
813 浏览

node.js - 如何在 opencv4nodejs 中将 JSON 描述符转换为 cv.Mat 格式?

我正在尝试使用存储在匹配功能函数内的 JSON 文件中的数据,使用 opencv4nodejs。存储的数据是来自先前计算的图像的描述符。当数据被计算然后在代码中使用时一切正常,但从 JSON 文件中获取时却不行。数据类型为cv.Mat,然后使用方法存储在 JSON 文件中fs.writeFileSync()。问题是下一个使用这些描述符的函数需要一个 type 的变量cv.Mat,而 JSON 数据不被认为是这样的。如何使用存储在 JSON 文件中的这些数据?

这个过程在 c++ 中完美地工作,使用cv::FileStorage方法。JSON 文件如下所示:

JSON 文件显示存储的数据,可用于存储cv::Mat带有运算符的变量>>

我无法使用 opencv4nodejs 5.5.0 版在 node.js 中重现此过程。JSON.stringify()我使用变量上的方法保存了JSON文件cv.Mat,然后fs.writeFileSync()从包中保存了方法来存储描述符(不幸的是,在opencv4nodejs中fs似乎没有等价物)。cv::FileStorage首先,我无法在创建的 JSON 文件中看到任何数据:

我尝试sizes通过方法访问元素first.sizes,但它只返回数组的大小,而不是里面的数据。我徒劳地搜索了一种访问 JSON 文件中不可见数据的方法。对此有所了解会很棒。更重要的是,我不能在下一个函数中使用这些描述符,因为它需要一个cv.Mat类型。

我探索了两种解决方案,到目前为止没有成功:

  • 格式化 JSON 文件。我试图创建一个 JSON 数组,但它没有效果:

我还尝试添加一个名为的密钥mat(我知道这是一个愚蠢的密钥,不知道如何格式化我的 JSON 文件,因为我在网上找不到任何文档):

  • 将 JSON 数据转换为cv.Mat. 我首先使用 读取文件fs.readFileSync(),然后使用方法解析文件JSON.parse()。当试图用 转换这个变量时new cv.Mat(),它返回一个空矩阵。我还尝试手动填充它:

这一次,它返回一个cv.Mat变量,显示与刚刚计算的 {keys:values} 完全相同的变量,但给出了错误的结果。它就像里面根本没有存储任何数据一样。

也许我的问题可以更准确:有没有办法表明 JSON 文件是 type cv.Mat,如果是,如何在 opencv4nodejs 中这样做?我们看到cv::FileStorage在创建文件时指定了一个类型,"type_id": "opencv-matrix". 但我找不到任何有关 opencv4nodejs 的文档或示例。第二个,如何将 JSON 数据转换为cv.Mat,以一种实际使用假定存储在 JSON 文件中的数据填充几乎创建的变量的方式?问题可能是文件不包含数据,因为我没有发现任何查看它们的可能性。奇怪的是,我什至看不到console.log(). 在描述符cv.Mat变量上,它显示:

在解析的 JSON 文件上:

欢迎任何帮助,无论如何感谢您阅读我的问题。