您的位置:首页 > 新闻 > 资讯 > 深圳信用网企业查询系统_云南文山学院_短视频新媒体推广_安徽网站关键词优化

深圳信用网企业查询系统_云南文山学院_短视频新媒体推广_安徽网站关键词优化

2024/10/30 17:07:21 来源:https://blog.csdn.net/weixin_43583693/article/details/140468214  浏览:    关键词:深圳信用网企业查询系统_云南文山学院_短视频新媒体推广_安徽网站关键词优化
深圳信用网企业查询系统_云南文山学院_短视频新媒体推广_安徽网站关键词优化
  • 下载语言库:tessdata语言库
  • 下载好后,记住在本地路径:如: D:\tessdate\tessdata-main

  • 添加 maven 
<!--基于 Tesseract-OCR 封装的 OCR 识别 jar-->
<dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>5.8.0</version>
</dependency>
  • 识别代码:(识别一些简单的文字)
public static void main(String[] args) {// 需要识别的图片路径String imagePath = "C:/Users/Dell/Desktop/cc.jpg";     // 使用Tesseract进行OCRTesseract tesseract = new Tesseract();// 设置Tesseract数据路径 上面下载的本地路径tesseract.setDatapath("D:\\tessdate\\tessdata-main");// 设置语言库  中文tesseract.setLanguage("chi_sim"); try {// 进行文字识别String result = tesseract.doOCR(new File(imagePath));System.out.println("OCR结果:");System.out.println(result);} catch (TesseractException e) {e.printStackTrace();}}

识别结果如下

这样只能识别一些简单的文字,还可能会识别出错,想识别复杂一点的减少出错率需要配合上opencv 使用--如下:

  • 添加maven
 <dependency><groupId>org.bytedeco</groupId><artifactId>opencv-platform</artifactId><version>4.5.1-1.5.5</version></dependency>

处理图像(根据情况修改里面的参数,找到识别率最高的参数组。注:有的参数有最小最大值或单数双数限制,不正确时会报错,从错误信息就可以看出来):

public static Mat preprocessImage(String imagePath) {// 1. 读取图像文件// 使用 OpenCV 的 imread 函数从指定路径读取图像,返回一个 Mat 对象。// Mat 是 OpenCV 中用于存储图像的基本数据结构。Mat src = opencv_imgcodecs.imread(imagePath);// 2. 转换为灰度图像// 使用 cvtColor 函数将读取的图像从 BGR 格式转换为灰度图像。// BGR 是 OpenCV 中默认的颜色格式,而灰度图像只有单一通道。Mat gray = new Mat();opencv_imgproc.cvtColor(src, gray, opencv_imgproc.COLOR_BGR2GRAY);// 3. 去噪// 使用 fastNlMeansDenoising 函数进行快速非局部均值去噪,主要用于减少图像中的噪声。// 这个步骤可以提高图像的清晰度,尤其是在灰度图像的情况下。Mat denoised = new Mat();opencv_photo.fastNlMeansDenoising(gray, denoised);// 4. 形态学操作去除背景纹路// 使用 getStructuringElement 创建一个形态学操作的核 (kernel),它是一个 2x2 的矩形。// 在形态学处理中,核用于在图像上执行膨胀、腐蚀等操作。Mat morphKernel = opencv_imgproc.getStructuringElement(opencv_imgproc.MORPH_RECT, new Size(2, 2));// 使用 morphologyEx 进行形态学关闭操作 (MORPH_CLOSE),这是一种先膨胀后腐蚀的操作。// 这种操作可以消除图像中的小空洞或细小的黑色区域,平滑图像中的边缘。Mat morph = new Mat();opencv_imgproc.morphologyEx(denoised, morph, opencv_imgproc.MORPH_CLOSE, morphKernel);// 5. 自适应阈值处理(二值化)// 使用 adaptiveThreshold 将形态学处理后的图像转换为二值图像。// 自适应阈值会根据图像局部区域的亮度自动调整阈值,从而对亮度不均的图像效果更好。// 参数说明:// 255 是最大值,表示超过阈值的像素值将设为 255(白色)。// ADAPTIVE_THRESH_GAUSSIAN_C 表示采用高斯滤波的方式来计算阈值。// THRESH_BINARY 表示二值化处理,像素值要么为 0(黑色),要么为 255(白色)。// 3 是 blockSize,表示用于计算阈值的邻域大小。// 2 是一个常数,会从计算出来的阈值中减去,用来调整结果。Mat binary = new Mat();opencv_imgproc.adaptiveThreshold(morph, binary, 255, opencv_imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, opencv_imgproc.THRESH_BINARY, 3, 2);// 6. 返回处理后的二值图像return binary;
}

使用方法:

public static void main(String[] args) {// 识别的图片路径String imagePath = "C:/Users/Dell/Desktop/ee.jpeg";// 获取处理后的图片Mat processedImage = preprocessImage(imagePath);// 保存预处理后的图像以便检查File outputDir = new File("output");if (!outputDir.exists()) {outputDir.mkdirs();  // 创建目录及所需的父目录}// 保存处理后的图片         处理后的新图片路径opencv_imgcodecs.imwrite("output/processed_image.jpg", processedImage);Tesseract tesseract = new Tesseract();tesseract.setDatapath("D:\\tessdate\\tessdata-main");tesseract.setLanguage("chi_sim");try {//    识别保存处理后的图片String result = tesseract.doOCR(new File("output/processed_image.jpg"));System.out.println("OCR结果:");System.out.println(result);} catch (TesseractException e) {e.printStackTrace();}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com