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
相关产品推荐
相关产品推荐

