BuffereImage Java中的简单方形识别

BuffereImage Java中的简单方形识别,java,image-recognition,Java,Image Recognition,我目前正在为学校的机器人俱乐部开发一个图像识别软件,其中一个部分真的让我感到困惑:形状识别。我需要能够检测到这个图像中的方块,然后才能尝试检测竞技场中的形状 我查了一些像JavaCV这样的库,但我找不到真正适合我口味的东西。作为参考,这里是我试图确定形状的图像 我做了一些与您的任务类似的事情,但我需要识别物体的类别(电阻器、电容器等),以及它们在真实黑白照片中的边界: 基本上,方法是这样的: 预处理-校正对比度、亮度、腐蚀、膨胀、中值等-此步骤可适用于整个/部分照片 分割-现在找到照片中可能有

我目前正在为学校的机器人俱乐部开发一个图像识别软件,其中一个部分真的让我感到困惑:形状识别。我需要能够检测到这个图像中的方块,然后才能尝试检测竞技场中的形状

我查了一些像JavaCV这样的库,但我找不到真正适合我口味的东西。作为参考,这里是我试图确定形状的图像


我做了一些与您的任务类似的事情,但我需要识别物体的类别(电阻器、电容器等),以及它们在真实黑白照片中的边界:

基本上,方法是这样的:

  • 预处理-校正对比度、亮度、腐蚀、膨胀、中值等-此步骤可适用于整个/部分照片
  • 分割-现在找到照片中可能有“某物”的部分,这些“某物”具有面积、像素强度等阈值
  • 特征-对于每个发现的电位段,计算一些特征-最大长度、面积、W、M-行列式等
  • 分类-有几个分类器检查给定特征是否属于此类,如果答案是肯定的-给定特征到理想模型特征的“距离”是多少。使用模糊逻辑推理进行分类
  • 当然,对于每一个成功的分类,如果存在最佳匹配,则选择最佳匹配
  • 在您的例子中,正方形最简单的特征是找出它的面积和属于找到的线段的两点之间的最大距离。在此之前,您应该使用

    您还可以创建一个好的算法来识别一个正方形是否被一条线切割(并删除该线,然后再次识别),并检查一个正方形是否与另一个正方形重叠,等等


    就我个人而言,我不知道有哪一个库可以做像
    library.recognizeSquaresOnImage(params)
    这样复杂的事情。我们为您提供了一些有用的方法来准备图像以供识别——这是您任务的核心——您必须自己完成

    每个识别问题都有其独特的特征,可以用来缩小“识别管道”中每个步骤的不确定结果。例如,在我的任务中,我知道对象在相当白的背景上是黑色的,并且或多或少彼此分离,等等

    我的项目是用OpenCV库用C++编写的,我用OpenCV库只进行图像的读取和显示,在窗口中显示-我不允许使用任何其他的库方法。 作为一个参考,你如何能做到这一点-是整个项目。即使是现在,它也不能完美地工作——它需要对分类器进行一些校准


    为了更好地掌握它在更高层次上的工作原理,请查看文件。

    您是否尝试过应用


    这似乎是您所需要的,因为您的正方形有直边。

    简单的正方形识别“图像识别中的任何东西都不简单(尽管强大的API可能提供更简单的包装方法),因此这似乎是矛盾的。“我真的找不到适合我口味的东西”让它在任何一个API中工作,不管它的味道如何。到目前为止,我已经尝试通过检查像素是否相邻来强制执行它。但这并不能生成一条漂亮的直线,因为有时正方形的宽度不完全是1。