首页 文章

使用OpenCV检测图像中的十字

提问于
浏览
41

我正试图在OpenCV的帮助下检测输入视频流中的形状(十字形) . 目前我的表现非常好 . 如下图所示,并非在某些视角下检测到所有角落 .

Enter image description here

我正在使用 findContours()approxPolyDP() 来获得我的轮廓的近似值 . 如果我在此近似曲线中检测到12个角/顶点,则假定斑点为十字形 .

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

2 回答

  • 8

    我有一些建议可能会提供一些有趣的结果,虽然我也不确定 .

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

    或者,您可以尝试训练Haar-based classifier以识别十字架 . 这种类型的分类器通常用于面部检测并检测图像中的定向边缘,通过几个定向边缘的相对位置对面部进行分类 . 它在面部具有良好的分类精度,并且速度极快 . 虽然在这种特殊情况下我无法保证其准确性,但它可以为简单的形状(如十字架)提供一些好的结果 .

  • 9

    计算convex hull然后利用convexity defects可能会有效 .

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

相关问题