哪种使用 OpenCV 的对象检测方法最适合不断变化的环境?

Posted

技术标签:

【中文标题】哪种使用 OpenCV 的对象检测方法最适合不断变化的环境?【英文标题】:Which method of object detection using OpenCV is best suited to changing environments? 【发布时间】:2019-04-03 05:36:00 【问题描述】:

我正在尝试确定最佳的 OpenCV 方法和实现,以识别出现在实时摄像机源中的对象。该实现需要对不断变化的光照条件具有鲁棒性,并且理想情况下可以适应背景中的轻微移动(树木/云朵移动),而不会产生过多的噪音。

到目前为止我尝试过的选项包括:

-识别空背景帧和当前帧之间的绝对像素差异(如果光线条件发生变化或相机抖动,则效果不佳)

-Background subtraction(适用于不断变化的条件,但会导致噪音过大)

-也考虑过使用边缘检测,不受光照条件变化的影响,并以某种方式比较物体形状,看看有什么新变化

理想情况下,我希望输出允许我为在帧中移动的任何对象生成边界框,背景参考随着时间的推移逐渐变化以适应不断变化的光照条件(或者可以将输入帧标准化为光照所以这没有效果?)

你会推荐什么?我在 C++ 中通过 Visual Studio 2017 运行 OpenCV

【问题讨论】:

在 OpenCV - MOG2 中。但请先在 bgslibrary 上查看:github.com/andrewssobral/bgslibrary OCV 库的背景减法方法适用于这类东西。当然,它不是免费的。如果需要性能,这将需要一些优化。在噪音的情况下以及一些后期处理,但这是值得的。 【参考方案1】:

我正在做一个类似项目的课程项目。我使用了几种方法,例如 HSV/RGB 阈值、累积差异图像和 OpenCV 库中的 MOG。

对于您的情况,我会推荐与 MOG 非常相似的累积差异图像。基本上,您将连续的帧彼此相减(从当前帧中减去之前的帧),然后使用阈值转换为二进制图像。然后可以对二值图像进行形态学运算来增强检测。

此方法相对适合您的情况,因为它对光线和相机移动的缓慢变化不敏感。但是不会检测到静止的物体。

为了去除噪声,您可能需要先腐蚀然后膨胀二值图像(玩转形态学运算)。

祝你好运!

【讨论】:

以上是关于哪种使用 OpenCV 的对象检测方法最适合不断变化的环境?的主要内容,如果未能解决你的问题,请参考以下文章

图像处理 - 哪种 OpenCV 算法适合我的需求?

哪种排序算法最适合重新排序几乎完全排序的列表?

哪种方法最适合批量插入?

opencv人脸识别用哪种方法比较好?Eigenfaces?Fisherfaces?LBP?

哪种生成 GUID 的方法最适合确保 GUID 真正唯一?

确定哪种方法最适合比较排序算法。小型数据收集的分治或招聘问题