NIKOLAY_TETUS

Untitled

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