Tob*_*obi 41 c++ video opencv feature-detection
我试图在OpenCV的帮助下检测输入视频流中的形状(十字形).目前我正在设法获得我的十字架的二进制图像效果非常好.不幸的是,我决定提取的blob是否是交叉的算法并不是很好.如下图所示,并非在某些视角下检测到所有角落.
我正在使用findContours()
并approxPolyDP()
获得我的轮廓的近似值.如果我在此近似曲线中检测到12个角/顶点,则假定斑点为十字形.
有没有更好的方法来解决这个问题?我想到了SIFT,但算法必须实时执行,我读到SIFT并不真正适合实时.
我有一些建议可能会提供一些有趣的结果,虽然我也不确定.
如果十字架总是靠近图像的中心并且始终位于平面上,您可以尝试在相机和十字架所在的平面之间找到单应性.这将使您能够将十字的样本图像(在平面旋转的不同选择中)转换为可视化十字的坐标系.然后,您可以生成可以与图像匹配的模板.你可以做一些简单的像素协议测试来确定你是否匹配.
或者,您可以尝试训练基于Haar的分类器来识别十字架.这种类型的分类器通常用于面部检测并检测图像中的定向边缘,通过几个定向边缘的相对位置对面部进行分类.它在面部具有良好的分类精度,并且速度极快.虽然在这种特殊情况下我无法保证其准确性,但它可能会为简单的形状(如十字架)提供一些好的结果.