使用 Python 和 OpenCV 检测 OCR 中的字间空间

2024-02-19

我是 Python 和 OpenCV 的新手。我目前正在使用 Python 和 OpenCV 进行 OCR 工作不使用超立方体到目前为止,我已经成功检测文本(字符和数字),但在检测单词之间的空格时遇到了问题。 例如- 如果图像显示“Hello John”,那么它会检测到 hello john,但无法检测到它们之间的空格,所以我的输出是“你好约翰“它们之间没有任何空格。我提取轮廓的代码是这样的(我已经导入了所有必需的模块,这是提取轮廓的主模块):

 imgGray = cv2.cvtColor(imgTrainingNumbers, cv2.COLOR_BGR2GRAY)
 imgBlurred = cv2.GaussianBlur(imgGray, (5,5), 0)                        


 imgThresh = cv2.adaptiveThreshold(imgBlurred,                           
                                  255,                                  
                                  cv2.ADAPTIVE_THRESH_GAUSSIAN_C,       
                                  cv2.THRESH_BINARY_INV,                
                                  11,                                   
                                  2)                                    

 cv2.imshow("imgThresh", imgThresh)      

 imgThreshCopy = imgThresh.copy()        

 imgContours, npaContours, npaHierarchy = cv2.findContours(imgThreshCopy,        
                                             cv2.RETR_EXTERNAL,                 
                                             cv2.CHAIN_APPROX_SIMPLE)           

之后,我对提取的数字和字符轮廓进行分类。 请帮我检测它们之间的空间。 预先感谢您,您的回复将非常有帮助。


由于您没有提供任何示例图像,我只是生成了一个简单的图像来测试:

h, w = 100, 600
img = np.zeros((h, w), dtype=np.uint8)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'OCR with OpenCV', (30, h-30), font, 2, 255, 2, cv2.LINE_AA)

正如我在评论中提到的,如果你只是dilate https://docs.opencv.org/3.3.0/d9/d61/tutorial_py_morphological_ops.html图像,然后白色区域将会扩大。如果您使用足够大的内核来执行此操作,以便附近的字母合并,但又足够小以防止单独的单词合并,那么您将能够提取每个单词的轮廓,并使用它一次屏蔽一个单词以用于 OCR 目的。

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (15, 15))
dilated = cv2.dilate(img, kernel)

要单独获取每个单词的掩码,只需找到这些较大斑点的轮廓即可。您也可以对轮廓进行排序;垂直、水平或两者兼而有之,以便您按照正确的顺序获得单词。因为我只有一行,所以我将在x方向:

contours = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)[1]
contours = sorted(contours, key=lambda c: min(min(c[:, :, 0])))

for i in range(len(contours)):

    mask = np.zeros((h, w), dtype=np.uint8)

    # i is the contour to draw, -1 means fill the contours
    mask = cv2.drawContours(mask, contours, i, 255, -1)
    masked_img = cv2.bitwise_and(img, img, mask=mask)

    cv2.imshow('Masked single word', masked_img)
    cv2.waitKey()

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

使用 Python 和 OpenCV 检测 OCR 中的字间空间 的相关文章

  • 使用 lxml 和 xpath 解析 xml 文件时如何保留 &

    我试图从输入 xml 文件中提取一些信息 并使用 lxml 和 xpath 指令将其打印到输出文件中 我在读取如下所示的 xml 标签时遇到问题
  • logger.warning("MSVC is not support") 在 Windows 10 上安装 pystan 时出错

    我的目标是在我的 Windows 10 计算机上安装 fbprophet 我正在尝试使用 pip 安装 pystan 先知的主要依赖项 但大约一分钟后 我收到以下错误 Traceback most recent call last File
  • Python 2.7 - statsmodels - 格式化和编写摘要输出

    我正在使用逻辑回归pandas 0 11 0 数据处理 和statsmodels 0 4 3在 Mac OSX Lion 上进行实际回归 我将运行约 2 900 个不同的逻辑回归模型 并需要将结果输出到 csv 文件并以特定方式格式化 目前
  • 使用 SURF 在检测到的对象周围绘制矩形

    我正在尝试从涉及冲浪检测器的以下代码中检测对象 我不想绘制匹配项 我想在检测到的对象周围绘制一个矩形 但不知何故我无法获得正确的单应性 请任何人指出在哪里我走错了 include
  • Django - 没有名为 _sqlite3 的模块

    我在 rhel 5 上安装了 django 1 4 默认情况下 rhel 5 中有 python 2 4 但要使用 django 1 4 我手动安装了 python 2 7 3 开发服务器运行良好 但是当我创建一个新项目并将 setting
  • OpenCV Python RTSP 流

    我想使用 RTSP 从 IP 摄像机流式传输视频 但我有一个问题 我已经安装了先决条件 而且我的 RTSP 链接可以在 VlC 播放器上运行 但是当我在编辑器中尝试并运行它时 它说找不到相机 这是我的代码 import cv2 import
  • VideoCapture 未检测到 uEye 摄像头

    我的 uEye 相机遇到了一个问题 使用我的笔记本电脑摄像头 id 0 或 USB 上的网络摄像头 id 1 此行完美运行 TheVideoCapturer open 1 TheVideoCapturer 属于 VideoCapture 类
  • 如何将k4a_image_t转换为opencv矩阵? (Azure Kinect 传感器 SDK)

    我开始尝试使用 Azure Kinect Sensor SDK 我经历了官方操作指南 https learn microsoft com en us azure Kinect dk about sensor sdk sensor sdk 我
  • python 2.7.5 中的 str() 与 repr() 函数[重复]

    这个问题在这里已经有答案了 有什么区别str and repr python 2 7 5 中的函数 python org 上的说明 The str 函数的目的是返回值的表示 这些值是相当的人类可读的 while repr 是为了生成 表示可
  • Python 的分布式锁管理器

    我有一堆具有多个实例的服务器 这些实例访问的资源对每秒的请求有硬性限制 我需要一种机制来锁定所有正在运行的服务器和实例对此资源的访问 我在github上找到了一个restful分布式锁管理器 https github com thefab
  • 如何将 OpenCV 的测试框架与 CMake 结合使用?

    好像 OpenCV 有一个测试框架 https github com Itseez opencv tree ef91d7e8830c36785f0b6fdbf2045da48413dd76 modules ts include opencv
  • 在OpenCV中将YUV转换为BGR或RGB

    我有一个电视采集卡 其输入内容为 YUV 格式 我在这里看到了与此问题类似的其他帖子 并尝试尝试所述的所有可能的方法 但它们都没有提供清晰的图像 目前最好的结果是 OpenCVcvCvtColor scr dst CV YUV2BGR 函数
  • 包装一个类,其方法返回该类的实例

    我需要编写一个类来包装第三方包中的类 通常 第三方类具有返回第三方类实例的方法 这些方法的包装版本必须将这些实例转换为包装类的实例 但我无法使其工作 我正在使用 Python 2 7 和新式类 基于创建一个包装类来围绕现有函数调用前置和后置
  • 检测计算机何时解锁 Windows

    我用过这个优秀的方法 https stackoverflow com questions 20733441 lock windows workstation using python 20733443锁定 Windows 计算机 那部分工作
  • 如何识别与我的对象相关的轮廓并找到它们的几何质心

    问题陈述和背景信息 EDIT 约束 法兰上的红色会随着时间的推移而变化 所以我此时不会尝试使用颜色识别来识别我的对象 除非它足够强大 此外 外部照明也可能是一个因素 因为将来这将是在室外区域 我有 RGB 深度相机 有了它 我就能捕捉到这个
  • 如何将 Opencv VideoWriter 与 GStreamer 结合使用?

    我正在尝试使用 Opencv VideoWriter 传输 h264 流 以使用 VideoCapture 将其传输到网络上的另一台电脑上 但是 我被困在 VideoWriter 上 执行此代码会返回错误 并且 out isOpened 始
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 绘制与Fig.show()内联的IPython Notebook图形?

    我正在使用 IPython Notebook 调用内联模式 pylab inline 以下代码立即在单元格处绘制一个图形 fig plt figure axes fig add axes 0 0 1 1 不过 我想在一个单元格中创建绘图 轴
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐