You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中使用jscanify库报错:TypeError: Cannot read properties of undefined (reading 'imread')

解决jscanify库的TypeError: Cannot read properties of undefined (reading 'imread')错误

这个错误的根源是jscanify依赖的opencv.js未被正确初始化,导致内部无法调用imread方法。以下是具体修复方案:

1. 确认依赖安装

确保已安装jscanify和opencv.js:

npm install jscanify opencv.js

2. 修改代码

需要手动将opencv实例传递给jscanify,并正确转换图片格式适配opencv处理:

import jscanify from 'jscanify'
import cv from 'opencv.js'
import { loadImage, createCanvas } from 'canvas'
import { writeFileSync } from 'fs';

// 关键:将opencv实例注入jscanify
jscanify.setCV(cv);

const scanner = new jscanify();

loadImage('test/test.png').then((testImage) => {
  // 创建canvas并加载图片,转换为opencv可识别的格式
  const canvas = createCanvas(testImage.width, testImage.height);
  const ctx = canvas.getContext('2d');
  ctx.drawImage(testImage, 0, 0);
  
  // 将canvas转为opencv的Mat对象
  const mat = cv.imread(canvas);
  // 提取纸张
  const resultMat = scanner.extractPaper(mat, 386, 500);
  
  // 将处理后的Mat转回canvas,用于保存
  const resultCanvas = createCanvas(resultMat.cols, resultMat.rows);
  cv.imshow(resultCanvas, resultMat);
  
  // 写入输出文件
  writeFileSync('test/output/result.png', resultCanvas.toBuffer('image/png'));
  
  // 释放opencv资源,避免内存泄漏
  mat.delete();
  resultMat.delete();
});

核心说明

  • jscanify本身不内置opencv,必须通过jscanify.setCV(cv)手动注入opencv实例
  • 直接传入canvas的Image对象无法被opencv识别,需要先绘制到canvas再转换为Mat格式
  • 使用完opencv的Mat对象后要调用delete()释放内存

内容的提问来源于stack exchange,提问作者WhatIsUpDevs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:09:55