【问题标题】:Segment, crop (bounding boxes) and labelling characters with openCV使用 openCV 分割、裁剪(边界框)和标记字符
【发布时间】:2017-04-21 09:07:42
【问题描述】:

我有一组代表一系列字符的图像。我想知道 OpenCV 或其他技术是否可以分割和裁剪图像中的每个字符。例如:

我有输入

我想得到:

是 5

为 0

是 4

是 1

是 9

是 2

【问题讨论】:

标签: python opencv image-processing python-imaging-library conv-neural-network


【解决方案1】:

从输入到输出有两个问题:

首先是分离你的角色。如果您的图像总是这样,并且数字被整齐地分开,那么使用findContoursconnectedComponents 将它们分开应该没有问题,也许还有像minAreaRect 这样的边界框功能。

第二个问题是,一旦你分开了你的数字,如何分辨图像代表哪个数字。这个问题有一个名字:OCR.
如果您有很多图像,也可以训练分类算法,正如您对这个问题的标记所暗示的那样。现在的“热门话题”是使用神经网络进行深度学习,但对于简单的应用程序,具有手工设计特征的常规机器学习分类可能会奏效。

【讨论】:

  • 我的数字并不总是整齐地分开,距离各不相同,而且大多数时候字符之间的距离很小。所以我正在寻找一种技术来为每个角色找到一个好的边界框。这样,所有字符的所有边界框都具有相同的大小。 openCV可以做到这一点吗?我的意思是我可以给openCV我的输入是一个数字序列并告诉他提取具有相同大小的边界框的字符吗?
  • 您可以要求查找轮廓/提取字符,然后然后检查您的边界框大小,两个大的尝试通过使用更高的分割来提取其中的两个字符,或任意将盒子分开 2 或.....
  • 更高的细分是什么意思?主要是我为给定的字符获取小的边界框,将它分成两个字符。它将8垂直分成两部分。然后我得到两个字符而不是 8
【解决方案2】:

如果您想分割数字,我会首先尝试使用打开操作(因为您的字母在白色背景上是黑色的,如果相反,它将关闭)以填补您的漏洞在你的数字中。然后我会垂直投影像素并分析你得到的形状。如果您在此投影形状中找到谷点,您将获得字符之间的垂直限制。你可以水平地做同样的事情来获得你的字符的上限和下限。这种方法只有在文本是水平的情况下才有效。

然后您可以使用标准 OCR 库或进行深度学习。由于这些数字似乎来自 MNIST 数据集,因此您会发现很多使用深度学习或其他技术对该数据集进行 OCR 的示例:

http://yann.lecun.com/exdb/mnist/

【讨论】:

    猜你喜欢
    • 2020-03-19
    • 1970-01-01
    • 2022-01-05
    • 2021-07-12
    • 2021-11-26
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多