我需要在拍摄的图像上检测形状及其颜色。这些形状是:心脏,矩形,星形和圆形。每个形状具有5种预定义颜色中的一种。颜色识别工作正常,但形状识别是一个真正的问题。
经过数小时和数小时的谷歌搜索,尝试和调整代码,我提出的最好的是以下过程:
首先,阅读图像并将其转换为灰度。
然后,应用模糊以减少背景噪音。 Medianblur似乎在这里效果最好。正常模糊效果不大,高斯模糊会使形状的边缘变圆,从而产生麻烦。
接下来,应用阈值。 AdaptiveThreshold不会给出我预期的结果;每个图像的结果差别很大。我现在应用两个阈值:一个使用Otsu的算法来过滤光形状,另一个使用二进制反转值来获得更暗的形状。
最后,在两个阈值上找到轮廓并将它们合并到一个列表中。 根据每个轮廓中的点数,我决定找到哪个形状。
我尝试添加Canny,锐化图像,不同阈值,凸壳,Houghes等。我可能也尝试了每种方法的所有可能值。现在,我可以在一些图像上使用上述过程,但在新图像上再次失败。要么检测到轮廓中的点太多,要么根本检测不到形状。
我真的被卡住了,不知道还有什么可以尝试。我还有一件事要做的就是使用面具,但是我找不到很多关于它的信息,也不知道它是否会产生任何不同。
任何建议都非常受欢迎。如果您想查看我的代码,请询问。您可以在此处找到示例图片:http://tinypic.com/a/34tbr/1