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)