使用 OpenCV 检测写在白板上的符号

Detect symbols written on a whiteboard using OpenCV

我正在尝试检测用 black/blue/red/green 标记写在白板上的形状。形状可以是圆形、矩形或三角形。该图像可以在此 post.

的底部找到

我使用 OpenCV 作为图像识别的框架。

我的首要任务是研究并列出可用于检测的不同策略。到目前为止,我发现了以下内容:

1)灰度、模糊、Canny Edge、轮廓检测,然后是一些逻辑来判断检测到的轮廓是否是形状?

2) 具有不同形状特征的 Haar 训练

3) SVM分类

4) 灰度、模糊、Canny Edge、霍夫变换和某种颜色分割?

还有其他我错过的策略吗?有没有更新的文章或经过测试的方法?你会怎么做?

测试图片之一:https://drive.google.com/file/d/0B6Fm7aj1SzBlZWJFZm04czlmWWc/view?usp=sharing

更新: 第一种策略似乎效果最好,但远非完美。当盒子没有关闭,或者白板有很多噪音时,就会出现问题。 Haar 训练似乎不是很有效,因为要检测的形状很简单,没有很多特定的特征。我还没有尝试过 CNN,但它似乎最适合图像分类,而不是在更大的图像中检测形状(但我不确定)

我认为第一个选项应该可行。您可以使用傅立叶描述符对分段形状进行分类。

http://www.isy.liu.se/cvl/edu/TSBB08/lectures/DBgrkX1.pdf

此外,也许您可​​以在这里找到有用的东西:

http://www.pyimagesearch.com/2016/02/08/opencv-shape-detection/

如果您想尝试更具挑战性但更现代的方法,请考虑深度学习方法(我会从 CNN 开始)。互联网上有许多可用的实现。虽然对于这个特定的项目来说可能有点矫枉过正,但它可能会在未来帮助你...