基于opencv的java形状检测

nlejzf6q  于 2021-07-09  发布在  Java
关注(0)|答案(0)|浏览(202)

我需要在拍摄的图像上检测形状和颜色。这些形状是:一个心形,一个矩形,一个星形和一个圆形。每个形状有5种预定义颜色中的一种。颜色识别工作正常,但形状识别是一个真正的问题。
经过数小时的谷歌搜索、尝试和调整代码,我想到的最好的方法是以下过程:
首先,读取图像并将其转换为灰度。
然后,应用模糊来减少来自背景的噪声。medianblur在这里似乎效果最好。普通模糊的效果很小,高斯模糊会使形状的边缘变圆,这会带来麻烦。
接下来,应用阈值。自适应阈值不能给出我期望的结果;每幅图像的结果差别很大。我现在应用两个阈值:一个使用大津算法来过滤亮的形状,另一个使用二进制反转值来过滤暗的形状。
最后,找到两个阈值上的轮廓并将它们合并到一个列表中。通过在每个轮廓中找到的点的数量,我决定找到哪个形状。
我尝试过添加canny、锐化图像、不同的阈值、凸包、houghes等等,我可能也尝试过每种方法的所有可能值。目前,我可以在一些图像上使用上述过程,但在新图像上再次失败。它要么在轮廓中检测太多的点,要么根本检测不到形状。
我真的被困住了,不知道还能尝试什么。有一件事我仍然要解决的是使用口罩,但我找不到太多的信息,也不知道这是否会有任何影响。
任何建议都是非常受欢迎的。如果你想看我的代码,请问。您可以在此处找到示例图像:http://tinypic.com/a/34tbr/1

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题