use*_*323 0 c++ opencv computer-vision
谁能建议我一种快速获取前景图像的方法?
目前我正在使用BackgroundSubtractorMOG2 类来执行此操作。它很慢。而且我的任务不需要那么复杂的算法。
我可以在暴饮暴食中获得背景图像。相机位置不会改变。所以我相信有一个简单的方法可以做到这一点。
我需要捕捉在相机前面移动的物体的斑点。并且永远只有一个对象。
我建议执行以下简单的解决方案:
计算差分矩阵:
这使得absDiff 中的每个像素(i,j) 设置为|frame(i,j) - 背景(ij)|。每个通道(例如R、G、B)都是独立处理的。
将结果转换为单通道单色图像:
应用二元过滤器:
这里我们使用 Ots'u 方法来确定适当的阈值水平。如果步骤 2 中存在任何噪声,二元滤波器会将其去除。
在absDiffGrayThres 图像中应用斑点检测。这可以是内置 opencv 方法之一或手动编写的代码,用于查找值为 255 的像素位置(记住快速 opencv 像素检索操作)
这样的过程足够快,可以在相当旧的 Core 2 Duo 2.1 GHz、4 GB RAM(没有 GPU 支持)上管理 640x480 RGB 图像,帧速率至少为 30 fps。
硬件备注:请确保您的相机镜头光圈没有设置为自动调节。想象一下以下情况:您一开始就计算了背景图像。然后,一些物体出现并覆盖了相机视野的大部分。进入镜头的光线较少,并且由于自动光线调节,相机会增加光圈,背景颜色发生变化,差异会在实际上没有任何物体的地方产生斑点。