当我想从我的相机检测 aruco 标记时,我在使用 opencv.js 时遇到问题。每次我尝试使用该方法
let image = new cv.imread('img');
我收到以下错误:
TypeError: cv.Mat is not a constructor
at Object.matFromImageData (VM52998 opencv.js:55)
我尝试使用 this question尝试解决我的问题。该问题的解决方案是使用异步加载,在加载脚本时调用 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');
.我所做的每一步,我采取的每一步都会导致同样的问题。
最佳答案
回到方 block 1 后,我重试了最基本的解决方案: 我只是将它添加到我的 HTML 页面,而不是所有写的 here .
<script src="<%= BASE_URL %>static/opencv.js" id="opencvjs"></script>
这并没有直接奏效,但在调试了我的代码的其他一些区域之后,我确保我的页面不包含其他错误(与此问题完全无关)。出于某种原因,我还没有调查并完全理解,在加载 opencv.js 脚本时出现其他错误已经中断了加载过程。虽然听起来无关紧要,但这对 opencv 命令产生了巨大影响。
最终的结果非常棒:
let image = new cv.imread('img');
console.log(image);
输出:
Mat {$$: {…}}
关于javascript - 如何解决 TypeError : cv. Mat is not a constructor opencv.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57849449/