From adfd363c6b6e8c3eb8d485be1f339a4e7431931d Mon Sep 17 00:00:00 2001 From: Vlad Date: Thu, 1 Feb 2024 16:38:51 +0600 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BD=D0=B5=20=D0=BE=D1=87=D0=B5=D0=BD=D1=8C=20=D0=BA?= =?UTF-8?q?=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=BD=D0=BE=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=D0=B4=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=B2=20=D0=BD=D1=83=D0=B6=D0=BD=D1=83=D1=8E=20=D0=BE?= =?UTF-8?q?=D0=B1=D0=BB=D0=B0=D1=81=D1=82=D1=8C=20=D0=BD=D0=B0=D0=B6=D0=B0?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BD=D0=B0=20q?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- videoKard.py | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 videoKard.py 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()