Совет Как

Opencv python детектор движения в прямоугольнике

Одной из удобных библиотек Python для обработки изображений и видео является OpenCV. Она содержит множество методов для работы с видеопотоками, включая анализ движения на кадрах. В данной статье мы рассмотрим создание детектора движения в прямоугольнике при помощи OpenCV.

Установка библиотеки

Перед началом работы нужно установить библиотеку OpenCV для Python. Подробную инструкцию по установке можно найти в документации OpenCV.

Загрузка видео

Для начала работы мы должны загрузить видео в код. Сделать это можно используя метод cv2.VideoCapture(). Здесь пример, как мы будем загружать видео:

import cv2

cap = cv2.VideoCapture("video.mp4")

Обработка кадров

Чтобы обрабатывать каждый кадр видеопотока, мы должны создать цикл, который будет выполняться до тех пор, пока видео не закончится. В нем мы будем считывать кадры, а затем обрабатывать их.

while True:
    ret, frame = cap.read()
    if not ret:
        break

    # Обработка кадров

Детектирование движения

Для выявления движения на кадре мы будем использовать разность между двумя последовательными кадрами. Для этого мы будем хранить предыдущий кадр и сравнивать его с текущим.

# Хранение предыдущего кадра
previous_frame = None

while True:
    ret, frame = cap.read()
    if not ret:
        break

    # Конвертация кадра в оттенки серого
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    if previous_frame is not None:
        # Разность между двумя последовательными кадрами
        delta_frame = cv2.absdiff(previous_frame, gray)
        
        # Бинаризация полученного изображения
        threshold = 30
        delta_frame = cv2.threshold(delta_frame, threshold, 255, cv2.THRESH_BINARY)[1]

        # Детекция контуров
        contours, _ = cv2.findContours(delta_frame, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

        # Поиск прямоугольников
        for contour in contours:
            x, y, w, h = cv2.boundingRect(contour)
            
            # Отрисовка прямоугольника на кадре
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
        
    previous_frame = gray.copy()

    # Отображение кадра с прямоугольниками на нем
    cv2.imshow("Frame", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

Заключение

Теперь мы можем создавать простые детекторы движения в Python при помощи OpenCV. Это может быть полезно для различных приложений, таких как видеонаблюдение или сегментации объектов на видео. Однако, как всегда, стоит помнить о том, что данное решение имеет некоторые ограничения и не подходит для всех случаев использования.