为了账号安全,请及时绑定邮箱和手机立即绑定

cv.Mat 不是构造函数 opencv

cv.Mat 不是构造函数 opencv

撒科打诨 2021-07-02 10:07:36
我收到这个错误 TypeError: cv.Mat is not a constructor我尝试做几乎所有事情都无法在互联网上找到任何解决方案索引.html<!DOCTYPE html><html><head><meta charset="utf-8"><title>Hello OpenCV.js</title></head><body><h2>Hello OpenCV.js</h2><p id="status">OpenCV.js is loading...</p><div><img src="dd.jpg" style="display:none;" id ="img"><canvas id = "videoInput" height="500" width="500"></canvas><canvas id = "canvasOutput" height="500" width="500"></canvas><script async type="text/javascript" src="index.js"></script><script async src="opencv.js" onload="onOpenCvReady();" type="text/javascript"></script></body></html>索引.js  document.getElementById('status').innerHTML = 'OpenCV.js is ready.';  let video = document.getElementById('videoInput');  let src = new cv.Mat(video.height, video.width, cv.CV_8UC4);  let dst = new cv.Mat(video.height, video.width, cv.CV_8UC4);  let gray = new cv.Mat();  let cap = new cv.VideoCapture(video);  let faces = new cv.RectVector();  let classifier = new cv.CascadeClassifier();  // load pre-trained classifiers  classifier.load('haarcascade_frontalface_default.xml');  const FPS = 30;  function processVideo() {      try {          if (!streaming) {              // clean and stop.              src.delete();              dst.delete();              gray.delete();              faces.delete();              classifier.delete();              return;          }          let begin = Date.now();          // start processing.          cap.read(src);          src.copyTo(dst);          cv.cvtColor(dst, gray, cv.COLOR_RGBA2GRAY, 0);          // detect faces.          classifier.detectMultiScale(gray, faces, 1.1, 3, 0);          // draw faces.          for (let i = 0; i < faces.size(); ++i) {              let face = faces.get(i);              let point1 = new cv.Point(face.x, face.y);              let point2 = new cv.Point(face.x + face.width, face.y + face.height);              cv.rectangle(dst, point1, point2, [255, 0, 0, 255]);          }    我也在导入 opencv.js,因为我有它的下载版本。估计是初始化有问题,请帮我解决...
查看完整描述

3 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

opencv.js 在真正初始化之前加载并触发 onload 事件。为了等到 opencv.js 真正准备好,opencv.js 提供了一个挂机“onRuntimeInitialized”。像这样使用它:


function openCvReady() {

  cv['onRuntimeInitialized']=()=>{

    // do all your work here

  };

}


查看完整回答
反对 回复 2021-07-08
?
DIEA

TA贡献1820条经验 获得超2个赞

确保脚本真正加载。如果错误是“cv is not defined”,那么要么删除async脚本标签中的 要么添加这个(或者只是标签中的一个onload属性<script>)


 script.addEventListener('load', () => {

在 WASM 构建(并且只有 WASM 构建)中,cv 不会立即可用,因为 WASM 是在运行时编译的。将启动功能分配给cv.onRuntimeInitialized。


请注意,WASM 版本应该更快;但是,它会产生一些启动开销(几 CPU 秒)。非 WASM 根本不调用onRuntimeInitialized。


要检查这两种情况,可以这样做


if (cv.getBuildInformation)

{

    console.log(cv.getBuildInformation());

    onloadCallback();

}

else

{

    // WASM

    cv['onRuntimeInitialized']=()=>{

        console.log(cv.getBuildInformation());

        onloadCallback();

    }

}


查看完整回答
反对 回复 2021-07-08
  • 3 回答
  • 0 关注
  • 930 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信