tesseractjs识别效率很低现在按照我的思路用js实现以提高准确率1去除干扰信息干扰信息为黑色相近46256之内全部清理2去除背景颜色相近的±30之内的全部设置为白色灰色的干扰信息改为白色文字改为黑色目前有图片的bufferfrom的数据可以参考下面java的写法···javapublic static String dealImageString imagePath throws IOEx
根据你提供的Java代码,我可以帮你将其转换为JavaScript代码。以下是转换后的代码:
function dealImage(imageData) {
const image = new Image();
image.src = imageData;
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
ctx.drawImage(image, 0, 0);
const width = canvas.width;
const height = canvas.height;
const imageData = ctx.getImageData(0, 0, width, height);
const pixels = imageData.data;
const backgroudColor = getColor(pixels, 0, 0);
const backgroudR = (backgroudColor >> 16) & 0xff;
const backgroudG = (backgroudColor >> 8) & 0xff;
const backgroudB = backgroudColor & 0xff;
for (let i = 0; i < width; i++) {
for (let j = 0; j < height; j++) {
const index = (j * width + i) * 4;
const r = pixels[index + 0];
const g = pixels[index + 1];
const b = pixels[index + 2];
const newColor = [r, g, b];
// 去除干扰信息,干扰信息为黑色相近46/256之内全部清理
if (r < 64 && g < 64 && b < 64) {
if (j - 1 >= 0) {
const prevIndex = ((j - 1) * width + i) * 4;
newColor[0] = pixels[prevIndex + 0];
newColor[1] = pixels[prevIndex + 1];
newColor[2] = pixels[prevIndex + 2];
} else if (i - 1 >= 0) {
const prevIndex = (j * width + (i - 1)) * 4;
newColor[0] = pixels[prevIndex + 0];
newColor[1] = pixels[prevIndex + 1];
newColor[2] = pixels[prevIndex + 2];
} else if (j + 1 < height) {
const nextIndex = ((j + 1) * width + i) * 4;
newColor[0] = pixels[nextIndex + 0];
newColor[1] = pixels[nextIndex + 1];
newColor[2] = pixels[nextIndex + 2];
} else if (i + 1 < width) {
const nextIndex = (j * width + (i + 1)) * 4;
newColor[0] = pixels[nextIndex + 0];
newColor[1] = pixels[nextIndex + 1];
newColor[2] = pixels[nextIndex + 2];
}
}
// 去除背景颜色,相近的±30之内的全部设置为白色,灰色的干扰信息改为白色,文字改为黑色
if (
Math.abs(r - backgroudR) <= 30 &&
Math.abs(g - backgroudG) <= 30 &&
Math.abs(b - backgroudB) <= 30
) {
newColor[0] = 255;
newColor[1] = 255;
newColor[2] = 255;
} else if (r > 150 && g > 150 && b > 150) {
newColor[0] = 255;
newColor[1] = 255;
newColor[2] = 255;
} else {
newColor[0] = 0;
newColor[1] = 0;
newColor[2] = 0;
}
pixels[index + 0] = newColor[0];
pixels[index + 1] = newColor[1];
pixels[index + 2] = newColor[2];
}
}
ctx.putImageData(imageData, 0, 0);
const newImageData = canvas.toDataURL();
return newImageData;
}
function getColor(pixels, x, y) {
const index = (y * width + x) * 4;
const r = pixels[index + 0];
const g = pixels[index + 1];
const b = pixels[index + 2];
return (r << 16) | (g << 8) | b;
}
你可以将上述代码添加到你的JavaScript文件中,并将imageData参数替换为你的图片数据。然后,你可以使用dealImage函数来处理图像并获得处理后的图像数据
原文地址: https://www.cveoy.top/t/topic/ixOp 著作权归作者所有。请勿转载和采集!