使用OpenCV检测图像中的交叉

我试图在OpenCV的帮助下检测输入视频流中的形状(十字形)。 目前我正在设定阈值以获得我的十字架的二元图像,效果很好。 不幸的是,我的算法来决定提取的blob是否是交叉的并不是很好。 正如您在下面的图片中看到的,并非在某些视角下检测到所有角落。

在这里输入图片说明

我使用findContours()approxPolyDP()来近似我的轮廓。 如果我在这条近似曲线中检测到12个拐角/顶点,则认为该斑点是十字形。

有没有更好的方法来解决这个问题? 我想过SIFT,但算法必须实时执行,并且我读到SIFT并不适合实时。


我有一些建议可能会提供一些有趣的结果,尽管我对此也不确定。

如果十字总是靠近图像的中心,并且总是位于平面上,那么您可以尝试在相机与十字架所在平面之间找到​​单应矩阵。 这将使您能够将十字的示例图像(在平面旋转中选择不同的平面)转换为可视化十字的坐标系。 然后,您可以生成可以匹配图像的模板。 你可以做一些简单的像素协议测试来确定你是否有匹配。

或者,您可以尝试训练基于哈尔的分类器来识别十字。 这种类型的分类器通常用于人脸检测并检测图像中的定向边缘,通过几个定向边缘的相对位置对面部进行分类。 它在脸上具有很好的分类准确性,速度非常快。 尽管在这种特殊情况下我不能保证它的准确性,但它可能为简单的形状(如十字)提供一些好的结果。


计算凸包然后利用凸面缺陷可能会奏效。

所有十字架应该有四个凸面缺陷,构成四组两个点或四个向量。 此外,如果你的形状是十字形,那么这四个矢量将有两对补角。

链接地址: http://www.djcxy.com/p/39503.html

上一篇: Detecting a cross in an image with OpenCV

下一篇: Detect object stored in Mat image opencv