C# 过滤不需要的斑点(检测图像中的数字)

C# 过滤不需要的斑点(检测图像中的数字),c#,algorithm,opencv,image-processing,aforge,C#,Algorithm,Opencv,Image Processing,Aforge,我正在写一个有趣的应用程序,我想从跑步者的t恤中得到数字。我与AForge.NET和emguCV一起玩,以获得期望的结果,我认为我很快就能解决我的问题,但我仍然希望从经验丰富的用户那里获得意见。 首先我有这样一个图像: 之后,我将其应用于最大对比度和一些照明,得到以下结果: 接下来,我对图像进行二值化,得到最终结果: [^] 接下来,我应用一些基本的过滤器来清除小斑点和非常大的斑点。接下来,我尝试找到高度>宽度的水滴,然后我尝试找到相似的水滴大小和形状,它们彼此相邻。 这是我的方法,在大多数

我正在写一个有趣的应用程序,我想从跑步者的t恤中得到数字。我与AForge.NET和emguCV一起玩,以获得期望的结果,我认为我很快就能解决我的问题,但我仍然希望从经验丰富的用户那里获得意见。 首先我有这样一个图像:

之后,我将其应用于最大对比度和一些照明,得到以下结果:

接下来,我对图像进行二值化,得到最终结果: [^]

接下来,我应用一些基本的过滤器来清除小斑点和非常大的斑点。接下来,我尝试找到高度>宽度的水滴,然后我尝试找到相似的水滴大小和形状,它们彼此相邻。 这是我的方法,在大多数情况下对我有效。作为添加,我创建直方图的可能斑点,我可以认为是一封信。这意味着我在矩形中寻找两种主色。如果两种主色调是黑色(淡)或白色(淡),那么我知道这是跑步者衬衫上的一个数字。 我想知道的是,你会采取什么不同的方法?比如混音频道,转换到HSV空间,或者过滤黑色? 我的整个想法是用少量非数字的斑点得到这些数字。 如果您能给我提些建议,我将不胜感激。 评论和想法都很好,如果你想写代码,请这样做。
谢谢您……

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

  • 让它尽可能简单
  • 在灰度或二进制中工作(尽早放弃颜色-它实际上没有多少对您有用的信息)
  • 明确这需要用于哪些情况(倒置字体、字体大小、旋转、背景)
  • 有一个培训和测试数据库的图像,你可以评估你的方法,所以这不仅仅是一个主观的评价
  • 关于这个问题的文献已经有很多了。我建议你读它,而不是重新发明轮子!!否则你可能会在这上面花很多年
    查看图像的特征,您可能首先检测到正方形,因为文本位于白色块中。不确定一个RGE是否可以检测正方形,但其他库可能可以做到。

    好问题,有很多方法可以做到这一点。 我建议你读一下:

    好的,如果你要写文本,我想我会先找到白色的方块
    接下来,使用一些OCR来检测数字(openCV)或训练自己的神经网络。或者对每个数字进行评分(可能在其顶部和下部),以便区分6和9。

    +1,建议不要“重新发明轮子”。OCR可能非常困难。有时令人惊讶的是,写一份清晰合理的规范——如果只为自己——能帮助解决问题。祝万科·帕夫列夫斯基好运。谢谢你们给我回信。这个问题被贴到了几个论坛上,我根本没有得到任何答案。这是一个非常有趣的领域,我现在所做的工作确实取得了很好的效果。当我在可能的“字母”斑点中找到直方图和两种主要颜色时(我看到的是黑色和白色),我的准确度几乎达到90%(甚至更高),我在那个特定的矩形中找到了字母。现在是做OCR的时候了。在这里,我还有一个问题,就是字母旋转,或因太阳反射而发出噪音,或前面是否有一只手臂。正如莫博士所建议的那样,在进一步研究之前,请仔细阅读一些教科书和现有的研究。购买或下载关于图像处理的标准文本。单一的二值化阈值可能无法在具有不同云量的自然室外照明中正常工作。在黑白而不是灰度中工作可能没有预期的效果。您可能需要查看笔划宽度变换。您可能会受到OCR用于车牌读取的启发,但与车牌不同的是,跑步者运动衫不会始终显示固定的数字;角色的非线性变形将是一个挑战。