基于OpenCV的Java形状检测
我需要在拍摄的图像上检测形状和颜色。这些形状是:心形、长方形、星形和圆形。每个形状有5种预定义颜色中的一种。颜色识别很好,但形状识别是一个真正的问题 经过数小时的谷歌搜索、尝试和调整代码,我想到的最好的方法是以下步骤:基于OpenCV的Java形状检测,java,opencv,detection,shapes,Java,Opencv,Detection,Shapes,我需要在拍摄的图像上检测形状和颜色。这些形状是:心形、长方形、星形和圆形。每个形状有5种预定义颜色中的一种。颜色识别很好,但形状识别是一个真正的问题 经过数小时的谷歌搜索、尝试和调整代码,我想到的最好的方法是以下步骤: 首先,读取图像并将其转换为灰度 然后,应用模糊以减少背景噪声。 Medianblur似乎在这里工作得最好。普通模糊几乎没有效果,而高斯模糊会使形状的边缘变圆,这会带来麻烦 接下来,应用threshold。 AdaptiveThreshold没有给出我期望的结果;每幅图像的结果差
- 首先,读取图像并将其转换为灰度
- 然后,应用模糊以减少背景噪声。 Medianblur似乎在这里工作得最好。普通模糊几乎没有效果,而高斯模糊会使形状的边缘变圆,这会带来麻烦
- 接下来,应用threshold。 AdaptiveThreshold没有给出我期望的结果;每幅图像的结果差别很大。我现在应用两个阈值:一个使用大津算法过滤光的形状,另一个使用二进制反转值过滤暗的形状
- 最后,在两个阈值上找到轮廓并将它们合并到一个列表中。 通过在每个轮廓中找到的点的数量,我决定找到哪个形状
任何建议都是非常受欢迎的。如果您想查看我的代码,请询问。您可以在这里找到示例图像:请看类似的问题可能会有所帮助。我已经多次分析了该问题。如上所述,通过调整一些参数,我可以让代码为该图像工作,但是对于我问题中的一些示例图像,或者任何新图像,它都不再工作。如何使我的程序更健壮,以便它也能检测到新图像(可能不太清晰或有不同的闪电)?由于您的图像是预定义的颜色,请转换为hsv,然后执行阈值处理,以解决闪电变化。背景是静态的吗?你试过背景减法吗?