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()