c++ - 使用 OpenCV 检测图像中的十字

标签 c++ opencv video feature-detection

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

Enter image description here

我正在使用 findContours()approxPolyDP() 来获得轮廓的近似值。如果我在这条近似曲线中检测到 12 个角/顶点,则假定该 Blob 是一个十字。

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

最佳答案

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

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

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

关于c++ - 使用 OpenCV 检测图像中的十字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14612192/

相关文章:

c++ - 分离线程然后让它超出范围(并使其仍在运行)是否安全?

c++ - 更好地处理 boost::program_options 中丢失/错误的键

c++ - CGAL:正常和加权 3D 三角剖分之间的区别

c++ - 求最大公约数的程序

opencv - 如何在特定角度范围内执行霍夫变换

android - cv::OutOfMemoryError 在 onCameraFrame 方法中由 Mat.clone() 抛出

python - 结合两个 warpAffine,移动和旋转图像

android - 在Android中支持对视频文件进行编码/解码

video - YouTube和FancyBox视频功能

ios - 错误域=AVFoundationErrorDomain 代码=-11800 "The operation could not be completed"{错误域=NSOSStatusErrorDomain 代码=-16976 "(null)"}