OpenCV背景扣除无法检测到带有小雪阵雨的视频的运动对象

2020年10月5日 22点热度 0条评论

我正在尝试使用opencv背景减法来检测运动对象。对于某些视频来说效果很好。但是对于一个特定的视频(由静态相机捕获),它无法检测到行人。此外,视频中有非常小的阵雪,用肉眼很难看到。这可能是它没有检测到运动物体的原因。或者可能还有其他原因,例如背景和前景对象的像素值相似。

这是程序代码:

import processing.core.*;
import processing.video.*;
import gab.opencv.*; 
public class BackgroundSubtraction extends PApplet {

Movie video;
OpenCV opencv;

public void setup(){
    size(720,680);
    video = new Movie(this, "/home/gurinderbeer/Downloads/IMG_1570.MOV");
    opencv = new OpenCV(this, width, height);
    opencv.startBackgroundSubtraction(0, 3, .5); // 5,3, .5
    video.play();
    }

public void draw() {
    image(video, 0, 0); 
    opencv.loadImage(video);
    opencv.updateBackground();
    opencv.dilate();
    opencv.erode();
    noFill();
    stroke(255, 0, 0);
    strokeWeight(3);
    for (Contour contour : opencv.findContours()) {
        contour.draw();
        }
    }


public void movieEvent(Movie m) {
      m.read();
    }

public static void main(String _args[]){
    PApplet.main(new String[] { BackgroundSubtraction.class.getName()});
    }
}

这些是来自视频的快照。我们几乎看不到有任何阵雪(尽管实际上有很少的阵雪),而且有两个行人在走。但它们不会在轮廓检测中捕获。

这次小雨可能是没有发现步行的行人的原因。

解决方案如下:

这可能是由于环境中的背景噪音造成的,您可以在处理视频之前对视频使用“平滑效果”。

平滑处理无疑会消除噪声,从而提高整体检测率。

有一个示例here