diff --git a/videoKard.py b/videoKard.py new file mode 100644 index 0000000..231d541 --- /dev/null +++ b/videoKard.py @@ -0,0 +1,67 @@ +import cv2 +import os + +# Создаем папку для сохранения вырезанных объектов +output_folder = 'output_rectangles' +if not os.path.exists(output_folder): + os.makedirs(output_folder) + +# Инициализируем видеокамеру +cap = cv2.VideoCapture(0) + +# Ширина и высота прямоугольника +rect_width, rect_height = 340, 200 + +while True: + # Считываем кадр с камеры + ret, frame = cap.read() + + # Определение координат центра экрана + center_x, center_y = frame.shape[1] // 2, frame.shape[0] // 2 + + # Вычисляем координаты верхнего левого и нижнего правого углов прямоугольника + x1, y1 = center_x - rect_width // 2, center_y - rect_height // 2 + x2, y2 = center_x + rect_width // 2, center_y + rect_height // 2 + + # Рисуем прямоугольник для поднесения объекта + cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2) + + # Отображаем кадр + cv2.imshow('Frame', frame) + + # Считываем кадр с камеры в оттенках серого + gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) + + # Выполняем размытие для уменьшения шумов + blurred = cv2.GaussianBlur(gray, (5, 5), 0) + + # Выполняем детекцию краев с использованием оператора Canny + edges = cv2.Canny(blurred, 50, 150) + + # Находим контуры в изображении + contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) + + # Ищем прямоугольники, соответствующие заданным размерам + for contour in contours: + x, y, w, h = cv2.boundingRect(contour) + if rect_width - 50 <= w <= rect_width + 50 and rect_height - 50 <= h <= rect_height + 50 and \ + x >= x1 and y >= y1 and x + w <= x2 and y + h <= y2: + # Рисуем прямоугольник вокруг объекта + cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) + + # Вырезаем объект из кадра + roi = frame[y:y + h, x:x + w] + + # Генерируем имя файла для сохранения + filename = os.path.join(output_folder, 'rectangle_object.jpg') + + # Сохраняем изображение объекта + cv2.imwrite(filename, roi) + + # Выход из цикла при нажатии клавиши 'q' + if cv2.waitKey(1) == ord('q'): + break + +# Освобождаем ресурсы +cap.release() +cv2.destroyAllWindows()