繁体   English   中英

使用OpenCV检测图像中的十字

[英]Detecting a cross in an image with OpenCV

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

在此输入图像描述

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

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

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

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

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

计算凸包然后利用凸性缺陷可能会起作用。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM