работает не очень корректно при подведении в нужную область нажать на q
This commit is contained in:
		
							parent
							
								
									a93054997e
								
							
						
					
					
						commit
						adfd363c6b
					
				
							
								
								
									
										67
									
								
								videoKard.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								videoKard.py
									
									
									
									
									
										Normal file
									
								
							| @ -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() | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user