描述
在java环境中使用opencv和tesserac识别一个图片表格
环境:opencv和tesseract安装在linux环境下,docker将运行springboot服务
opencv和tesseract的安装和docker加载可参考之前的文章
过程
将图片进行预处理,过滤掉颜色等干扰元素
提取图片的水平线和垂直线,并进行重叠过滤
得到水平线和垂直线的交点,根据交点构建单元格
对每个单元格进行识别
1.转换
将image转换成mat
private Mat bufferedImageToMat(BufferedImage bufferedImage) {
Mat mat = new Mat();
try {
// Convert BufferedImage to byte array
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "png", byteArrayOutputStream);
byteArrayOutputStream.flush();
byte[] imageInByte = byteArrayOutputStream.toByteArray();
byteArrayOutputStream.close();
// Convert byte array to Mat
MatOfByte matOfByte = new MatOfByte(imageInByte);
mat = Imgcodecs.imdecode(matOfByte, Imgcodecs.IMREAD_UNCHANGED);
} catch (IOException e) {
e.printStackTrace();
}
return mat;
}
2.图片预处理
原图:

将图片灰度化,并进行边缘检测
灰度化
//image为加载的图片
Mat imread = bufferedImageToMat(image);
Mat gray = new Mat();
Imgproc.cvtColor(imread, gray,Imgproc.COLOR_BGR2GRAY);
边缘检测

本文详细介绍了在Java环境中,如何通过OpenCV和Tesseract库处理图像表格,包括图像预处理、识别水平和垂直线、过滤重叠线、构建单元格以及单元格文本识别的过程,同时提及了Docker部署SpringBoot服务的背景。
最低0.47元/天 解锁文章
1200

被折叠的 条评论
为什么被折叠?



