使用 OpenCV 对 Tesseract OCR 进行图像预处理

2024-03-27

我正在尝试开发一个应用程序,它使用 Tesseract 来识别手机摄像头拍摄的文档中的文本。我使用 OpenCV 来预处理图像以实现更好的识别,应用高斯模糊和阈值方法进行二值化,但结果非常糟糕。

Here https://s6.postimg.cc/sft9tot9d/0_img02.png is the the image I'm using for tests: enter image description here

And here https://s6.postimg.cc/mswww7qqp/2_img02_sharpened_threshold1.png the preprocessed image: enter image description here

我还可以使用哪些其他过滤器来使图像对于 Tesseract 更具可读性?


我在这里描述了为 Tesseract 准备图像的一些技巧:使用tesseract识别车牌 https://stackoverflow.com/questions/19268648/using-tesseract-to-recognize-license-plates/19418347#19418347

在您的示例中,发生了几件事......

您需要将文本设置为黑色,将图像的其余部分设置为白色(not相反)。这就是字符识别的功能。灰度is好的,只要背景大部分是全白,文字大部分是全黑即可;文本的边缘可能是灰色的(抗锯齿)并且may帮助识别(但不一定 - 你必须进行实验)

您看到的问题之一是,在图像的某些部分,文本确实很“薄”(阈值处理后字母中出现间隙),而在其他部分,文本确实很“厚”(并且字母开始合并)。 Tesseract 不会这样:) 发生这种情况是因为输入图像的光照不均匀,因此单个阈值并不适用于所有地方。解决方案是进行“局部自适应阈值处理”,其中为图像的每个邻域计算不同的阈值。有很多方法可以做到这一点,但请查看例如:

  • OpenCV 中的自适应高斯阈值 https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_thresholding/py_thresholding.html with cv2.adaptiveThreshold(...,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,...)
  • 当地大津的方法 http://sharky93.github.io/docs/dev/auto_examples/plot_local_otsu.html
  • 局部自适应直方图均衡 http://sharky93.github.io/docs/dev/auto_examples/plot_local_equalize.html

您遇到的另一个问题是线条不直。根据我的经验,Tesseract 可以处理非常有限非直线的程度(百分之几的透视变形、倾斜或歪斜),但它实际上并不能与wavy线。如果可以的话,请确保源图像具有直线:) 不幸的是,对此没有简单的现成答案;你必须研究研究文献并自己实现一种最先进的算法(如果可能的话将其开源 - 确实需要一个开源解决方案)。谷歌学术搜索“" 将帮助您开始,例如:

  • 弯曲文档图像的文本行分割 http://www.academia.edu/7675762/S_Text_line_Segmentation_of_Curved_Document_Images

最后:我认为使用 python 生态系统(ndimage、skimage)会比使用 C++ 中的 OpenCV 做得更好。 OpenCV python 包装器对于简单的东西来说是可以的,但是对于你想要做的事情,它们无法完成工作,你将需要获取许多 OpenCV 中没有的部分(当然你可以混合和匹配)。在 C++ 中实现曲线检测之类的功能将比在 python 中长一个数量级(*即使您不了解 python,也是如此)。

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 OpenCV 对 Tesseract OCR 进行图像预处理 的相关文章

  • 如何提取图像中的表格

    我想从图像中提取表格 这个 python 模块https pypi org project ExtractTable https pypi org project ExtractTable 与他们的网站https www extractta
  • 编译使用Basler相机的程序

    我正在尝试使用 Basler 相机捕获图像的 C 程序来工作 我拿到 来自制造商的代码 它应该 非常容易使用 但是 链接它有 成为一场噩梦 我的 C 时代已经过去了 最近只使用 Matlab 所以我可能会犯一些愚蠢的错误 但请赐教 代码如下
  • 使用 python 突出显示图像中的特定文本

    我想突出显示网站屏幕截图中的特定单词 句子 截取屏幕截图后 我使用提取文本pytesseract and cv2 效果很好 我可以获得有关它的文本和数据 import pytesseract import cv2 if name main
  • 如何使用requirements.txt 在 Heroku python Web 应用程序中安装 Dlib?

    我构建了一个涉及机器学习的 Python Flask Web API 但在 Heroku 上部署它时遇到了很多挫折 问题是 我的应用程序依赖于 Dlib 一个库 我似乎找不到在我的 Heroku 服务器中安装的方法 我正在试图解决这个问题
  • 如何使图像呈现出陈旧、布满灰尘、颜色褪色的外观?

    我有旧画的图像 这些画很旧 布满灰尘 颜色褪色 如图所示here https i stack imgur com xuoEF jpg 如何赋予任何图像这种 旧 外观 我找不到任何过滤器或 openCV 函数来实现这种类型的外观 EDIT 我
  • opencv 视频上的颜色阈值

    I am thresholding for a color range in an opencv video The goal is to seperate the B mode black and white information on
  • 使用相位相关和对数极坐标变换获得旋转位移

    我一直在编写一个脚本 它使用 cv2 计算两个图像之间的旋转位移phaseCorrelate method 我有两张图像 第二张是第一张图像的 90 度旋转版本 加载图像后 我将它们转换为对数极坐标 然后将它们传递到phaseCorrela
  • OpenCV findContours 破坏源图像

    我编写了一个在单通道空白图像中绘制圆形 直线和矩形的代码 之后 我只需找出图像中的轮廓 就可以正确获取所有轮廓 但找到轮廓后 我的源图像变得扭曲 为什么会出现这种情况 任何人都可以帮我解决这个问题 我的代码如下所示 using namesp
  • 使用 openCV 和 python 检测物体

    我正在尝试使用 OpenCV 和 Python 检测下图中的白点 我尝试使用函数 cv2 HoughCircles 但没有成功 我需要使用不同的方法吗 这是我的代码 import cv2 cv import numpy as np impo
  • 如何使用 OpenCV 检测图像帧中的对象?

    我正在使用 Raspberry Pi 开发一个漫游器 它将清扫房间并捡起掉落在地上的物体 为了检测物体 我使用了在流动站操作开始时拍摄的参考图像 以及每 10 秒单击一次的图像 新图像 为了确定图像帧是否发生变化 我在参考图像和新图像之间进
  • 在 C、C++ 中实现腐蚀、膨胀

    我对二值图像的膨胀是如何完成的有理论上的了解 AFAIK 如果我的 SE 结构元素 是这样的 0 1 1 1 在哪里 代表中心 我的图像 二进制是这样的 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0
  • 如何将 Tesseract 导入 Angular2 (TypeScript)

    我正在尝试将 Tesseract 导入 Angular2 TypeScript 我可以看到它保存到 node modules 文件夹中 但是在使用时 import Tesseract from types tesseract js it s
  • 如何在Python中使用tcp套接字发送和接收网络摄像头流?

    我正在尝试重新创建这个项目 https github com hamuchiwa AutoRCCar 我拥有的是服务器 我的电脑 和客户端 我的树莓派 我所做的与原始项目不同的是我尝试使用一个简单的网络摄像头而不是树莓派摄像头将图像从我的
  • 如何在Eclipse中配置Tesseract进行Android开发?

    我已经从事 Android 工作 6 个月了 至此我对Android开发有了基本的了解 现在我想使用 Tesseract 开发一个 OCR Android 应用程序 为此 我从 Tesseract 下载了 android ndk r6b t
  • 相机标定(OpenCV 2.3)-如何使用畸变参数?

    我有一组带有一些附加标记的刚体图像 我在这些标记之一中定义了一个原点坐标系 我想获得该坐标系与在相机原点定义的坐标系之间的旋转和平移 我尝试了一段时间 POSIT 以下this http goo gl cUYYt 但从未获得可接受的结果 直
  • 在 RGB 图像上绘制多类语义分割透明叠加

    我有语义分割掩码的结果 值在 0 1 之间 需要大津阈值来确定什么是积极的 我想直接在 RGB 图像上绘制 在 RGB 图像上每个预测类具有不同的随机颜色 我使用以下内容绘制了具有单一颜色的单个蒙版 是否有一个包或简单的策略可以为多类别做到
  • 用Python识别图像

    我对 OCR 识别和 Python 都有点陌生 我想要实现的是从 Python 脚本运行 Tesseract 以 识别 tif 中的某些特定数字 我以为我可以为 Tesseract 做一些培训 但我在 Google 和 SO 上没有找到任何
  • 如何设置K-means openCV c++的初始中心

    我正在尝试使用 OpenCv 和 Kmeans 对图像进行分割 我刚刚实现的代码如下 include opencv2 objdetect objdetect hpp include opencv2 highgui highgui hpp i
  • CUDA、NPP 滤波器

    CUDA NPP 库支持使用 nppiFilter 8u C1R 命令过滤图像 但不断出现错误 我可以毫无问题地启动并运行 boxFilterNPP 示例代码 eStatusNPP nppiFilterBox 8u C1R oDeviceS
  • OpenCV 仅围绕大轮廓绘制矩形?

    第一次发帖 希望我以正确的方式放置代码 我正在尝试检测和计算视频中的车辆 因此 如果您查看下面的代码 我会在阈值处理和膨胀后找到图像的轮廓 然后我使用 drawContours 和矩形在检测到的轮廓周围绘制一个框 我试图在 drawCont

随机推荐