0

我正在使用“Opencv for unity”和 orbbec astra。我将摄像头安装在天花板上,我需要检测地板上是否存在物体。我怎样才能拆除地板?

我不能使用背景减法,因为一段时间后,物体会变成背景。

我试图“记录”一个没有物体作为背景的帧,并且每一帧我都从 orbbec 的深度图像中减去它。它工作得很好,但 5-10 分钟后它开始发出很大的噪音并且它不再可用了。

if(recordBG){
   Imgcodecs.imwrite(Application.streamingAssetsPath + "/bg.jpg", imgMat); 
   recordBG = false;
   bg = imgMat;
}
imgMat = imgMat - bg;
Core.inRange(imgMat, scalarMin, scalarMax, imgMat);

我不明白为什么在这段时间之后地板的深度图像会发生变化(相机保持静止)。

有没有其他方法可以去除地板?

编辑(添加图像):

这是垫 bg:

在此处输入图像描述

“白色”对象是减法后的 imgMat,我将检测限制在距离地板几厘米处(Core.inRange 函数)

在此处输入图像描述

5分钟后也是一样。这是我的问题。两张图片之间没有任何移动

在此处输入图像描述

4

2 回答 2

0

我使用了类似的方法,我可以告诉你深度相机只提供每帧深度的估计,所以即使它们非常准确(Orbbec 不是这种情况,你没有提到你使用的是什么模型,但我对 Astra 模型的体验不好)帧之间的值略有不同(对于固定相机的相同点)。我所做的是设置最小高度阈值,因此当我减去背景时,低于此阈值的所有内容都将被丢弃。我用它来检测人,在我的情况下是一个合理的选择,在你的情况下,这取决于你的物体有多高(我的意思是,你的物体是否可以与深度噪声区分开来?)。uint.

于 2021-06-25T15:50:25.740 回答
0

我还没有使用深度相机,但我使用的是返回 2d 帧的普通相机,解决这个问题的一种方法是在前几帧中你可以完美地检测到地板,对吗?创建该段的蒙版并将其用作其他帧中的蒙版/固定背景。这样您就不必一次又一次地计算/估计地板。

于 2021-07-03T13:24:02.337 回答