c# - 过滤不需要的 Blob (检测图像中的数字)

标签 c# algorithm opencv image-processing aforge

我正在编写一个有趣的应用程序,我想从运行者 T 恤中获取数字。我正在使用 AForge.NET 和 emguCV 来获得预期的结果,我认为我已经非常接近解决我的问题了,但我仍然希望从更有经验的用户那里得到意见。 首先我有这张图片:

enter image description here 之后我应用了最大对比度和一些亮度,我得到了这个结果:

enter image description here 接下来我将图像二值化并得到最终结果: enter image description here [^]

接下来我应用一些基本过滤器来清除小 Blob 和非常大的 Blob 。接下来,我尝试找到高度>宽度的 Blob ,然后我尝试找到相似的 Blob 大小和形状,并且彼此相邻。 这是我的方法,在大多数情况下都适合我。作为补充,我创建了我可能认为是字母的可能 Blob 的直方图。这意味着我在该矩形中寻找 2 种主色。如果两种主色是黑色(ish)或白色(ish),我知道这是运行者衬衫上的数字。 我想知道的是,您有什么不同的方法吗?像混合 channel 、转换到 HSV 空间以及过滤黑色? 我的整个想法是用少量不是数字的 Blob 来获得这些数字。 我将不胜感激任何建议。 评论和想法都很好,如果你想写代码,请去做。 谢谢...

最佳答案

您需要仔细考虑为什么要执行这些步骤。你在做什么似乎有点随意。它可能适用于一张图片,但不适用于其他图片。我的建议:

  1. 尽可能简单
  2. 在灰度或二进制中工作(尽早丢弃颜色 - 它确实没有什么对你有用的信息)
  3. 清楚这需要适用于哪些情况(倒置字体、字体大小、旋转、背景)
  4. 有一个训练和测试图像数据库,您可以根据这些图像评估您的方法,因此这不仅仅是主观评估!
  5. 已经有大量关于这个主题的文献。我建议您阅读它而不是重新发明轮子!否则你可能会在这上面花很多年!

关于c# - 过滤不需要的 Blob (检测图像中的数字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18812200/

相关文章:

opencv - 在 OpenCV 中绘制透明图像

python - 获取图像opencv python中每个 channel 的对比度

c# - 何时使用 TcpClient.ReceiveTimeout 与 NetworkStream.ReadTimeout?

c# - 列表框中的扩展器在折叠时留下空白

c# - 与宽高比匹配的最小尺寸

algorithm - 如何找到通过一组集合的最短路径?

c - 查找运行三个循环的代码的时间复杂度

c++ - Qt 线程中未检测到信号和插槽

c# - GridView 删除行

c# - 找不到方法 : 'Boolean Microsoft. IdentityModel.Tokens.TokenUtilities.IsRecoverableConfiguration