Вы можете использовать технику вычитания фона .Вот два способа сделать это:
- Вычесть предыдущий кадр из текущего кадра.Только пиксели в обоих кадрах, которые не изменились, будут равны нулю.См. cvSub , cvAbsDiff .
- Сохранение скользящего среднего видеокадров.См. Функцию cvRunningAvg в разделе Анализ движения и отслеживание объектов в документации OpenCV.Для каждого нового кадра вычтите скользящее среднее из текущего кадра.Когда вы закончите, обновите скользящее среднее с текущим кадром.
После использования одного из методов, описанных выше, вы можете сегментировать полученное изображение разницы, используя cvThreshold или cvAdaptiveThreshold .Это приведет к двоичному изображению, в идеале с нулем, где изображение было статичным, и 1 или 255., где присутствовало движение.
Хотя вы не упомянули об этом в своем вопросе, вы можете приступить к вычислениюконтур двоичного изображения.Для этого есть cvFindContours .