如何使用 openCV 作为运动检测器(不寻找视频输出)

how to use openCV as a motion detector (not looking for video output)

我是 c++ 的新手,并且一直在对 openCV 进行大量研究。 我目前正在使用网络摄像头制作运动检测器并尝试使用它来触发功能(有点像监听器)。我的应用程序中不需要任何类型的可视视频。我只需要感知运动并给出像布尔值这样的输出。

我更熟悉 java 但它必须用 c++ 编写,没有包装器,没有转换器。

谁能帮我指明写作方向。也许有一些我应该查找的教程或建议。即使我应该使用不同的库而不是 openCV。

作为起点,我建议使用基本的图像减法,然后从那里开始。

基本算法为:

firstFrame = readFrame()

firstFrameGrey = convertToGreyScale(firstFrame) // makes the image B&W

while True

    secondFrame = readFrame()
    secondFrameGrey = convertToGreyScale(secondFrame)

    difference = sub(firstFrameGrey, secondFrameGrey)

    threshold()

    // perform some morphological operations
    erosion()
    dilation()

    findContours()

// loop over contours and try filtering based off of area, perimeter etc.
// This filtration will allow you to detect significant changes.

// update frame
firstFrameGrey = secondFrameGrey

对于形态学操作,尝试不同的值,看看会得到什么结果。

有关 thresholding

的更多信息

This 教程解释了如何执行形态学操作。

可以找到轮廓信息here along with the area API

算法应该是不言自明的,openCV 有我命名的所有方法。