OpenCV/videoKard.py

68 lines
2.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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