以下のように OpenCV.js を onload で実行していたんですが、成功する時と「cv.Mat is not a constructor」というエラーが発生する時がありました。リロードすると起きたり起きなかったりという症状です。
<body onload="execute()">
<script>
function execute() {
let mat = new cv.Mat();
// OpenCV.js を使った処理
}
</script>
</body>
調べたところ、以下のページに解決策が書いてありました。
https://stackoverflow.com/questions/56671436/cv-mat-is-not-a-constructor-opencv
cv['onRuntimeInitialized'] で OpenCV モジュールの初期化後の処理を登録できるみたいですね。以下のようにしたところ、エラーは発生しなくなりました。
<body onload="execute()">
<script>
function execute() {
cv['onRuntimeInitialized'] = () => {
let mat = new cv.Mat();
// OpenCV.js を使った処理
}
}
</script>
</body>