我按如下方式设置我的 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
我偶然发现了同样的问题。我尝试了很多不同的东西,但最终,似乎“DetectMarkers”在 opencv.js 版本 4.9.0 中被破坏了。
我通过从 https://docs.opencv.org/**4.x**/opencv.js 下载 opencv.js“更新”到最新版本。那是2024/03/26,我不知道它的重现性如何。
现在,运行“DetectMarkers”并访问检测到的标记 ID 及其坐标确实可以工作。对于“drawDetectedMarkers”,我仍然遇到类似的错误,运行起来会非常方便。尽管如此,核心功能仍然可以通过这种方式使用。
亲切的问候, 史蒂芬