Advertisement
Botlarakla

Азадов Надирбек 11 практика

Nov 15th, 2024 (edited)
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.49 KB | Source Code | 0 0
  1. import cv2
  2. import numpy as np
  3.  
  4. def detect_and_draw_coin(image_path, coin_number, contour_color=(0, 255, 0)):
  5.     # Загрузить изображение
  6.     image = cv2.imread(image_path)
  7.     if image is None:
  8.         print(f"Не удалось загрузить изображение. Проверьте путь: {image_path}")
  9.         return
  10.    
  11.     # Преобразование в градации серого
  12.     gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  13.    
  14.     # Применение размытия для устранения шумов
  15.     blurred = cv2.GaussianBlur(gray, (11, 11), 0)
  16.    
  17.     # Пороговая бинаризация
  18.     _, thresh = cv2.threshold(blurred, 120, 255, cv2.THRESH_BINARY_INV)
  19.    
  20.     # Поиск контуров
  21.     contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
  22.    
  23.     # Идентификация монет
  24.     for idx, contour in enumerate(contours):
  25.         # Вычисление координат прямоугольника для каждой монеты
  26.         x, y, w, h = cv2.boundingRect(contour)
  27.        
  28.         # Нанесение номера монеты на изображение
  29.         cv2.putText(image, f"{idx+1}", (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (255, 0, 0), 2)
  30.        
  31.         # Если номер монеты совпадает с заданным
  32.         if idx + 1 == coin_number:
  33.             # Нарисовать контур заданным цветом
  34.             cv2.drawContours(image, [contour], -1, contour_color, 3)
  35.    
  36.     # Сохранение и показ результата
  37.     output_path = "output_image.jpg"
  38.     cv2.imwrite(output_path, image)
  39.     print(f"Результат сохранен: {output_path}")
  40.     cv2.imshow("Detected Coin", image)
  41.     cv2.waitKey(0)
  42.     cv2.destroyAllWindows()
  43.  
  44. # Укажите путь к вашему изображению
  45. image_path = "/Users/texnik/Downloads/Новая папка 3/coins.jpg"  # Замените на актуальный путь
  46. coin_number = 2  # Номер монеты, которую нужно выделить
  47.  
  48. # Запуск функции
  49. detect_and_draw_coin(image_path, coin_number, (0, 255, 0))
  50.  
  51.  
  52.  
  53.  
  54. ###############################
  55. import cv2
  56. import numpy as np
  57.  
  58. def region_growing(image, seed_point, threshold):
  59.     """
  60.    Алгоритм region growing для сегментации изображения.
  61.    
  62.    :param image: Градации серого, numpy array
  63.    :param seed_point: Точка начала (x, y)
  64.    :param threshold: Порог для роста региона
  65.    :return: Сегментированное изображение (маска)
  66.    """
  67.     # Размеры изображения
  68.     h, w = image.shape
  69.    
  70.     # Маска сегмента
  71.     mask = np.zeros((h, w), np.uint8)
  72.    
  73.     # Очередь для обработки пикселей
  74.     queue = [seed_point]
  75.    
  76.     # Значение начальной точки
  77.     initial_value = image[seed_point[1], seed_point[0]]
  78.    
  79.     while queue:
  80.         x, y = queue.pop(0)
  81.        
  82.         # Если пиксель уже обработан, пропустить
  83.         if mask[y, x] == 255:
  84.             continue
  85.        
  86.         # Проверка условия порога
  87.         if abs(int(image[y, x]) - int(initial_value)) <= threshold:
  88.             mask[y, x] = 255  # Добавить пиксель в регион
  89.            
  90.             # Добавить соседние пиксели в очередь
  91.             for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
  92.                 nx, ny = x + dx, y + dy
  93.                 if 0 <= nx < w and 0 <= ny < h and mask[ny, nx] == 0:
  94.                     queue.append((nx, ny))
  95.    
  96.     return mask
  97.  
  98. # Укажите путь к файлу gradient.png
  99. image_path = "/Users/texnik/Downloads/Новая папка 3/gradient.png"  # Замените на актуальный путь
  100.  
  101. # Попробуйте загрузить изображение
  102. gradient = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
  103.  
  104. if gradient is None:
  105.     print(f"Ошибка: не удалось загрузить файл {image_path}. Проверьте путь и доступность файла.")
  106. else:
  107.     # Настройки для выделения секции 2
  108.     seed_point = (50, 50)  # Координаты точки семени (x, y)
  109.     threshold = 5          # Порог
  110.    
  111.     # Применение алгоритма region growing
  112.     mask = region_growing(gradient, seed_point, threshold)
  113.    
  114.     # Визуализация результата
  115.     segmented = cv2.bitwise_and(gradient, gradient, mask=mask)
  116.    
  117.     # Сохранение результата
  118.     output_path = "/Users/texnik/Downloads/Новая папка 3/gradient_segmented_section_2.png"
  119.     cv2.imwrite(output_path, segmented)
  120.     print(f"Результат сохранен: {output_path}")
  121.    
  122.     # Отображение результата
  123.     cv2.imshow("Original Gradient", gradient)
  124.     cv2.imshow("Region Growing (Section 2)", segmented)
  125.     cv2.waitKey(0)
  126.     cv2.destroyAllWindows()
  127.  
  128.  
  129.  
  130.  
  131. ##########################
  132. import cv2
  133. import numpy as np
  134. import os
  135.  
  136. # Укажите путь к вашему изображению
  137. image_path = "/Users/texnik/Downloads/Новая папка 3/finger_prints.png"  # Замените на актуальный путь
  138.  
  139. # Проверка существования файла
  140. if not os.path.exists(image_path):
  141.     print(f"Ошибка: файл {image_path} не найден!")
  142. else:
  143.     # Загрузка изображения в градациях серого
  144.     image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
  145.  
  146.     if image is None:
  147.         print(f"Ошибка: не удалось загрузить файл {image_path}. Проверьте путь.")
  148.     else:
  149.         # 1. Обычная бинаризация с порогом 80
  150.         _, thresh1 = cv2.threshold(image, 80, 255, cv2.THRESH_BINARY)
  151.  
  152.         # 2. Пороговая сегментация с THRESH_TRUNC и THRESH_OTSU
  153.         _, thresh2 = cv2.threshold(image, 0, 255, cv2.THRESH_TRUNC | cv2.THRESH_OTSU)
  154.  
  155.         # 3. Адаптивная бинаризация с blockSize=5 и C=3
  156.         adaptive_thresh = cv2.adaptiveThreshold(
  157.             image,
  158.             255,
  159.             cv2.ADAPTIVE_THRESH_MEAN_C,
  160.             cv2.THRESH_BINARY,
  161.             blockSize=5,
  162.             C=3
  163.         )
  164.  
  165.         # Отображение результатов
  166.         cv2.imshow("Original Image", image)
  167.         cv2.imshow("Threshold 1 (Binary, 80)", thresh1)
  168.         cv2.imshow("Threshold 2 (TRUNC + OTSU)", thresh2)
  169.         cv2.imshow("Adaptive Threshold", adaptive_thresh)
  170.  
  171.         # Сохранение результатов
  172.         output_path_1 = "/Users/texnik/Downloads/Новая папка 3/thresh1_binary_80.png"
  173.         output_path_2 = "/Users/texnik/Downloads/Новая папка 3/thresh2_trunc_otsu.png"
  174.         output_path_3 = "/Users/texnik/Downloads/Новая папка 3/adaptive_threshold.png"
  175.  
  176.         cv2.imwrite(output_path_1, thresh1)
  177.         cv2.imwrite(output_path_2, thresh2)
  178.         cv2.imwrite(output_path_3, adaptive_thresh)
  179.  
  180.         print(f"Результаты сохранены как:\n{output_path_1}\n{output_path_2}\n{output_path_3}")
  181.        
  182.         cv2.waitKey(0)
  183.         cv2.destroyAllWindows()
  184.  
  185.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement