Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import cv2
- import numpy as np
- def detect_book_boundaries(image_path):
- # Загрузка изображения
- image = cv2.imread(image_path)
- # Преобразование изображения в оттенки серого
- gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
- # Применение размытия для уменьшения шума
- blurred = cv2.GaussianBlur(gray, (9, 9), 1)
- # Применение оператора Кэнни для обнаружения границ
- edges = cv2.Canny(blurred, 50, 150)
- # Применение дилатации для закрытия пробелов между границами
- dilated = cv2.dilate(edges, None, iterations=1)
- # Поиск контуров на изображении
- contours, _ = cv2.findContours(dilated.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
- # Инициализация списка для хранения координат границ книг
- book_boundaries = []
- # Обход всех контуров и добавление границ в список
- for contour in contours:
- # Игнорирование маленьких контуров
- if cv2.contourArea(contour) > 4500:
- # Получение ограничивающего прямоугольника для контура
- x, y, w, h = cv2.boundingRect(contour)
- _, image_w, _ = image.shape
- if w <= image_w * 0.85:
- # Добавление границы книги в список
- book_boundaries.append((x, y, x + w, y + h))
- # Создание нового изображения с отмеченными границами книг
- marked_image = image.copy()
- for boundary in book_boundaries:
- x1, y1, x2, y2 = boundary
- cv2.rectangle(marked_image, (x1, y1), (x2, y2), (0, 255, 0), 2)
- # Сохранение изображения с отмеченными границами книг
- marked_image_path = 'marked_image.jpg'
- cv2.imwrite(marked_image_path, marked_image)
- # Возвращение списка границ книг и пути к сохраненному изображению
- return book_boundaries, marked_image_path
- # Пример использования функции для распознавания границ книг на изображении
- image_path = 'aaa.jpg'
- boundaries, marked_image_path = detect_book_boundaries(image_path)
- # Вывод координат границ книг
- for boundary in boundaries:
- print(f"Книга: {boundary}")
- # Вывод пути к сохраненному изображению
- print("Сохраненное изображение:", marked_image_path)
Advertisement
Add Comment
Please, Sign In to add comment