how to solve TypeError: cv.Mat is not a constructor opencv.js?

how to solve TypeError: cv.Mat is not a constructor opencv.js?

当我想从我的相机检测 aruco 标记时,我在使用 opencv.js 时遇到问题。每次我尝试使用方法

let image = new cv.imread('img');

我收到以下错误:

TypeError: cv.Mat is not a constructor
    at Object.matFromImageData (VM52998 opencv.js:55)

我尝试使用 来尝试解决我的问题。问题的解决方案是使用异步加载,在加载脚本时调用 onOpenCvReady(),这将为 cv 的 onRuntimeInitialized 事件设置一个处理程序。处理程序应执行必要的操作。

<script>
        function onOpenCvReady() {
            cv['onRuntimeInitialized']=()=>{
                alert('OpenCV.js is ready.');
                // do all operations 
</script>
<script async src="<%= BASE_URL %>static/opencv.js" onload="onOpenCvReady();"></script>

然而,当我尝试使用问题的解决方案时,我遇到了一个问题: 函数 onOpenCvReady() 根本没有被调用。

此外,我等了超过 15 分钟(只是为了确定),然后尝试直接在控制台中使用行 javascript let image = new cv.imread('img');。我的一举一动,每一步的结果都是一样的。

回到方块 1 后,我重试了最基本的解决方案: 我只是将它添加到我的 HTML 页面,而不是所有写成 的内容。

<script src="<%= BASE_URL %>static/opencv.js" id="opencvjs"></script>

这并没有直接奏效,但在调试我的代码的其他一些区域后,我确保我的页面不包含其他错误(与此问题完全无关)。出于某种原因,我还没有调查并完全理解,在加载 opencv.js 脚本时出现其他错误已经中断了加载过程。虽然听起来无关紧要,但这对 opencv 命令产生了巨大影响。

最终结果非常棒:

let image = new cv.imread('img');
console.log(image);

输出:

Mat {$$: {…}}