如何用OpenCV预处理米白底黑字图像以适配Tesseract文字识别?
OCR识别数字错误问题排查
问题场景
需要提取截图中「Kills」下方的数字文本,但识别结果始终存在偏差:
- 预期结果:
3328387 - 实际识别结果:
3228387
已尝试的处理方案
方案1:灰度转换+阈值处理
使用Tesseract.js结合OpenCV做图像预处理,代码如下:
import { createWorker, OEM, PSM } from "tesseract.js"; import cv from "@u4/opencv4nodejs"; import fs from "node:fs/promises"; const worker = await createWorker("eng", OEM.TESSERACT_LSTM_COMBINED); await worker.setParameters({ tessedit_char_whitelist: "0123456789", tessedit_pageseg_mode: PSM.SINGLE_BLOCK, }); const image = await cv.imdecodeAsync( await fs.readFile("input.png"), cv.COLOR_BGR2GRAY ); const threshHoldedImage = await image.thresholdAsync( 150, 255, cv.THRESH_BINARY ); const blurredImage = await cv.imencodeAsync(".png", threshHoldedImage); const { data: { text: tierKillsText }, } = await worker.recognize(blurredImage, { rectangle: { top: 265, left: 552, width: 87, height: 138, }, }); console.log(tierKillsText); // 输出: 3228387 // 预期: 3328387
方案2:增加高斯模糊
在阈值处理后添加高斯模糊操作,但问题仍未解决:
const sigma = 0.75; const blurred = threshHoldedImage.gaussianBlur(new cv.Size(0, 0), sigma);
内容的提问来源于stack exchange,提问作者user23351566
相关产品推荐
相关产品推荐

