如何使用“opencv.js”的“aruco”模块中的“detectMarkers”功能?

问题描述 投票:0回答:1

我按如下方式设置我的 aruco 探测器:

let detectionParams = new cv.aruco_DetectorParameters();
let refineParams = new cv.aruco_RefineParameters(10,3,true);
let dictionary = cv.getPredefinedDictionary(cv.DICT_ARUCO_ORIGINAL);
let detector = new cv.aruco_ArucoDetector(dictionary,detectionParams,refineParams)

refineParams
的参数是我在opencv网站上找到的默认参数。当我记录字典和检测器时,它们都在那里。探测器具有
detectMarkers
功能。

然后我尝试运行

detectMarkers
函数,如下所示:

let src_image= cv.imread("canvas");
let corners_matvec = new cv.MatVector()
let id_mat = new cv.Mat()
detector.detectMarkers(src_image,corners_matvec,id_mat);

这给了我一个“未捕获”错误,堆栈顶部有“___cxa_throw”。

由于这是我第一次使用这个库,我认为我可能缺少一些基本的东西。有没有曾经使用过这项技术的人可以帮助我指出我哪里出错了?

我使用的是opencv.js 4.9.0版本。

目前我的预感是我在“输出变量”上做错了什么。

当在 opencv 文档网站上查看 C++ 的 aruco 检测教程时,我看到这些“输出变量”仅被声明而没有分配任何内容。 当未初始化变量时,我收到类型错误,当我尝试将

null
分配给它们时,我收到绑定错误。 因为我之前偶然发现了以下错误“预期为 null 或 MatVector 实例..”,所以我认为分配
null
将是这里的解决方案,但事实并非如此,因为我随后收到此错误:“null 不是有效的 MatVector” .

我也尝试过使用3.4.20版本的opencv.js

javascript opencv computer-vision aruco
1个回答
0
投票

我偶然发现了同样的问题。我尝试了很多不同的东西,但最终,似乎“DetectMarkers”在 opencv.js 版本 4.9.0 中被破坏了。

我通过从 https://docs.opencv.org/**4.x**/opencv.js 下载 opencv.js“更新”到最新版本。那是2024/03/26,我不知道它的重现性如何。

现在,运行“DetectMarkers”并访问检测到的标记 ID 及其坐标确实可以工作。对于“drawDetectedMarkers”,我仍然遇到类似的错误,运行起来会非常方便。尽管如此,核心功能仍然可以通过这种方式使用。

亲切的问候, 史蒂芬

© www.soinside.com 2019 - 2024. All rights reserved.