Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于OpenCV的Java形状检测_Java_Opencv_Detection_Shapes - Fatal编程技术网

基于OpenCV的Java形状检测

基于OpenCV的Java形状检测,java,opencv,detection,shapes,Java,Opencv,Detection,Shapes,我需要在拍摄的图像上检测形状和颜色。这些形状是:心形、长方形、星形和圆形。每个形状有5种预定义颜色中的一种。颜色识别很好,但形状识别是一个真正的问题 经过数小时的谷歌搜索、尝试和调整代码,我想到的最好的方法是以下步骤: 首先,读取图像并将其转换为灰度 然后,应用模糊以减少背景噪声。 Medianblur似乎在这里工作得最好。普通模糊几乎没有效果,而高斯模糊会使形状的边缘变圆,这会带来麻烦 接下来,应用threshold。 AdaptiveThreshold没有给出我期望的结果;每幅图像的结果差

我需要在拍摄的图像上检测形状和颜色。这些形状是:心形、长方形、星形和圆形。每个形状有5种预定义颜色中的一种。颜色识别很好,但形状识别是一个真正的问题

经过数小时的谷歌搜索、尝试和调整代码,我想到的最好的方法是以下步骤:

  • 首先,读取图像并将其转换为灰度

  • 然后,应用模糊以减少背景噪声。 Medianblur似乎在这里工作得最好。普通模糊几乎没有效果,而高斯模糊会使形状的边缘变圆,这会带来麻烦

  • 接下来,应用threshold。 AdaptiveThreshold没有给出我期望的结果;每幅图像的结果差别很大。我现在应用两个阈值:一个使用大津算法过滤光的形状,另一个使用二进制反转值过滤暗的形状

  • 最后,在两个阈值上找到轮廓并将它们合并到一个列表中。 通过在每个轮廓中找到的点的数量,我决定找到哪个形状

我尝试过添加Canny、锐化图像、不同的阈值、凸包、Houghes等。我可能也尝试过每种方法的所有可能值。目前,我可以在一些图像上使用上述过程,但在新图像上再次失败。要么它在轮廓中检测到太多的点,要么根本检测不到形状

我真的被卡住了,不知道还能尝试什么。有一件事我还需要解决,那就是使用口罩,但我找不到太多关于这方面的信息,也不知道这是否会产生任何影响


任何建议都是非常受欢迎的。如果您想查看我的代码,请询问。您可以在这里找到示例图像:

请看类似的问题可能会有所帮助。我已经多次分析了该问题。如上所述,通过调整一些参数,我可以让代码为该图像工作,但是对于我问题中的一些示例图像,或者任何新图像,它都不再工作。如何使我的程序更健壮,以便它也能检测到新图像(可能不太清晰或有不同的闪电)?由于您的图像是预定义的颜色,请转换为hsv,然后执行阈值处理,以解决闪电变化。背景是静态的吗?你试过背景减法吗?