import cv2 import numpy as np import matplotlib.pyplot as plt # Загружаем исходное изображение image_path = "image_xKfzIM.png" img = cv2.imread(image_path) h, w, _ = img.shape # Создаем маску только для области кровати (примерные координаты) mask = np.zeros((h, w), dtype=np.uint8) # Координаты полигона, охватывающего кровать и ее элементы (капельница, дуга, пульт) points = np.array([, [140, 380], [110, 380], [140, 500], # капельница, [450, 260], [450, 350], [380, 550], # дуга терапевтическая, [385, 520], [385, 600], [875, 660], # каркас кровати, [600, 900], [85, 780] ], dtype=np.int32) # Вырезаем область с кроватью для детекции границ gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) blurred = cv2.GaussianBlur(gray, (5, 5), 0) # Находим границы (Canny Edge Detection) edges = cv2.Canny(blurred, 30, 100) # Ограничиваем только зоной кровати, чтобы убрать стены, ковер и комод bed_mask = np.zeros_like(edges) # Заполняем грубую зону кровати белым на маске cv2.fillPoly(bed_mask, [np.array([[80,380], [150,380], [150,510], [460,260], [460,500], [890,650], [890,830], [580,920], [80,780]], dtype=np.int32)], 255) bed_edges = cv2.bitwise_and(edges, bed_mask) # Делаем линии толстыми (Dilation) kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (4, 4)) thick_edges = cv2.dilate(bed_edges, kernel, iterations=1) # Создаем финальное изображение: белые линии на черном фоне output = np.zeros_like(img) output[thick_edges > 0] = [255, 255, 255] # Сохраняем результат cv2.imwrite("bed_lines.png", output)