NIKOLAY_TETUS

Untitled

Jul 3rd, 2023
2,885
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.85 KB | None | 0 0
  1. import cv2
  2. import numpy as np
  3.  
  4.  
  5. def detect_book_boundaries(image_path):
  6.     # Загрузка изображения
  7.     image = cv2.imread(image_path)
  8.    
  9.     # Преобразование изображения в оттенки серого
  10.     gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  11.    
  12.     # Применение размытия для уменьшения шума
  13.     blurred = cv2.GaussianBlur(gray, (9, 9), 1)
  14.    
  15.     # Применение оператора Кэнни для обнаружения границ
  16.     edges = cv2.Canny(blurred, 50, 150)
  17.    
  18.     # Применение дилатации для закрытия пробелов между границами
  19.     dilated = cv2.dilate(edges, None, iterations=1)
  20.    
  21.     # Поиск контуров на изображении
  22.     contours, _ = cv2.findContours(dilated.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
  23.    
  24.     # Инициализация списка для хранения координат границ книг
  25.     book_boundaries = []
  26.    
  27.     # Обход всех контуров и добавление границ в список
  28.     for contour in contours:
  29.         # Игнорирование маленьких контуров
  30.         if cv2.contourArea(contour) > 4500:
  31.             # Получение ограничивающего прямоугольника для контура
  32.             x, y, w, h = cv2.boundingRect(contour)
  33.             _, image_w, _ = image.shape
  34.             if w <= image_w * 0.85:
  35.                 # Добавление границы книги в список
  36.                 book_boundaries.append((x, y, x + w, y + h))
  37.    
  38.     # Создание нового изображения с отмеченными границами книг
  39.     marked_image = image.copy()
  40.     for boundary in book_boundaries:
  41.         x1, y1, x2, y2 = boundary
  42.         cv2.rectangle(marked_image, (x1, y1), (x2, y2), (0, 255, 0), 2)
  43.    
  44.     # Сохранение изображения с отмеченными границами книг
  45.     marked_image_path = 'marked_image.jpg'
  46.     cv2.imwrite(marked_image_path, marked_image)
  47.    
  48.     # Возвращение списка границ книг и пути к сохраненному изображению
  49.     return book_boundaries, marked_image_path
  50.  
  51. # Пример использования функции для распознавания границ книг на изображении
  52. image_path = 'aaa.jpg'
  53. boundaries, marked_image_path = detect_book_boundaries(image_path)
  54.  
  55.  
  56. # Вывод координат границ книг
  57. for boundary in boundaries:
  58.     print(f"Книга: {boundary}")
  59.  
  60. # Вывод пути к сохраненному изображению
  61. print("Сохраненное изображение:", marked_image_path)
Advertisement
Add Comment
Please, Sign In to add comment