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, (5, 5), 0)
- # Применение оператора Кэнни для обнаружения границ
- edges = cv2.Canny(blurred, 50, 150)
- # Применение дилатации для закрытия пробелов между границами
- dilated = cv2.dilate(edges, None, iterations=2)
- # Поиск контуров на изображении
- contours, _ = cv2.findContours(dilated.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
- # Инициализация списка для хранения координат границ книг
- book_boundaries = []
- # Обход всех контуров и добавление границ в список
- for contour in contours:
- # Игнорирование маленьких контуров
- if cv2.contourArea(contour) > 1000:
- # Получение ограничивающего прямоугольника для контура
- x, y, w, h = cv2.boundingRect(contour)
- # Добавление границы книги в список
- 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)
- # Возвращение списка границ книг и нового изображения
- return book_boundaries, marked_image
- # Пример использования функции для распознавания границ книг на изображении
- image_path = 'image.jpg'
- boundaries, marked_image = detect_book_boundaries(image_path)
- # Вывод координат границ книг
- for boundary in boundaries:
- print(f"Книга: {boundary}")
- # Отображение нового изображения с отмеченными границами книг
- cv2.imshow("Marked Image", marked_image)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
Advertisement
Add Comment
Please, Sign In to add comment