Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import cv2
- import numpy as np
- def detect_and_draw_coin(image_path, coin_number, contour_color=(0, 255, 0)):
- # Загрузить изображение
- image = cv2.imread(image_path)
- if image is None:
- print(f"Не удалось загрузить изображение. Проверьте путь: {image_path}")
- return
- # Преобразование в градации серого
- gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
- # Применение размытия для устранения шумов
- blurred = cv2.GaussianBlur(gray, (11, 11), 0)
- # Пороговая бинаризация
- _, thresh = cv2.threshold(blurred, 120, 255, cv2.THRESH_BINARY_INV)
- # Поиск контуров
- contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
- # Идентификация монет
- for idx, contour in enumerate(contours):
- # Вычисление координат прямоугольника для каждой монеты
- x, y, w, h = cv2.boundingRect(contour)
- # Нанесение номера монеты на изображение
- cv2.putText(image, f"{idx+1}", (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (255, 0, 0), 2)
- # Если номер монеты совпадает с заданным
- if idx + 1 == coin_number:
- # Нарисовать контур заданным цветом
- cv2.drawContours(image, [contour], -1, contour_color, 3)
- # Сохранение и показ результата
- output_path = "output_image.jpg"
- cv2.imwrite(output_path, image)
- print(f"Результат сохранен: {output_path}")
- cv2.imshow("Detected Coin", image)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
- # Укажите путь к вашему изображению
- image_path = "/Users/texnik/Downloads/Новая папка 3/coins.jpg" # Замените на актуальный путь
- coin_number = 2 # Номер монеты, которую нужно выделить
- # Запуск функции
- detect_and_draw_coin(image_path, coin_number, (0, 255, 0))
- ###############################
- import cv2
- import numpy as np
- def region_growing(image, seed_point, threshold):
- """
- Алгоритм region growing для сегментации изображения.
- :param image: Градации серого, numpy array
- :param seed_point: Точка начала (x, y)
- :param threshold: Порог для роста региона
- :return: Сегментированное изображение (маска)
- """
- # Размеры изображения
- h, w = image.shape
- # Маска сегмента
- mask = np.zeros((h, w), np.uint8)
- # Очередь для обработки пикселей
- queue = [seed_point]
- # Значение начальной точки
- initial_value = image[seed_point[1], seed_point[0]]
- while queue:
- x, y = queue.pop(0)
- # Если пиксель уже обработан, пропустить
- if mask[y, x] == 255:
- continue
- # Проверка условия порога
- if abs(int(image[y, x]) - int(initial_value)) <= threshold:
- mask[y, x] = 255 # Добавить пиксель в регион
- # Добавить соседние пиксели в очередь
- for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
- nx, ny = x + dx, y + dy
- if 0 <= nx < w and 0 <= ny < h and mask[ny, nx] == 0:
- queue.append((nx, ny))
- return mask
- # Укажите путь к файлу gradient.png
- image_path = "/Users/texnik/Downloads/Новая папка 3/gradient.png" # Замените на актуальный путь
- # Попробуйте загрузить изображение
- gradient = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
- if gradient is None:
- print(f"Ошибка: не удалось загрузить файл {image_path}. Проверьте путь и доступность файла.")
- else:
- # Настройки для выделения секции 2
- seed_point = (50, 50) # Координаты точки семени (x, y)
- threshold = 5 # Порог
- # Применение алгоритма region growing
- mask = region_growing(gradient, seed_point, threshold)
- # Визуализация результата
- segmented = cv2.bitwise_and(gradient, gradient, mask=mask)
- # Сохранение результата
- output_path = "/Users/texnik/Downloads/Новая папка 3/gradient_segmented_section_2.png"
- cv2.imwrite(output_path, segmented)
- print(f"Результат сохранен: {output_path}")
- # Отображение результата
- cv2.imshow("Original Gradient", gradient)
- cv2.imshow("Region Growing (Section 2)", segmented)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
- ##########################
- import cv2
- import numpy as np
- import os
- # Укажите путь к вашему изображению
- image_path = "/Users/texnik/Downloads/Новая папка 3/finger_prints.png" # Замените на актуальный путь
- # Проверка существования файла
- if not os.path.exists(image_path):
- print(f"Ошибка: файл {image_path} не найден!")
- else:
- # Загрузка изображения в градациях серого
- image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
- if image is None:
- print(f"Ошибка: не удалось загрузить файл {image_path}. Проверьте путь.")
- else:
- # 1. Обычная бинаризация с порогом 80
- _, thresh1 = cv2.threshold(image, 80, 255, cv2.THRESH_BINARY)
- # 2. Пороговая сегментация с THRESH_TRUNC и THRESH_OTSU
- _, thresh2 = cv2.threshold(image, 0, 255, cv2.THRESH_TRUNC | cv2.THRESH_OTSU)
- # 3. Адаптивная бинаризация с blockSize=5 и C=3
- adaptive_thresh = cv2.adaptiveThreshold(
- image,
- 255,
- cv2.ADAPTIVE_THRESH_MEAN_C,
- cv2.THRESH_BINARY,
- blockSize=5,
- C=3
- )
- # Отображение результатов
- cv2.imshow("Original Image", image)
- cv2.imshow("Threshold 1 (Binary, 80)", thresh1)
- cv2.imshow("Threshold 2 (TRUNC + OTSU)", thresh2)
- cv2.imshow("Adaptive Threshold", adaptive_thresh)
- # Сохранение результатов
- output_path_1 = "/Users/texnik/Downloads/Новая папка 3/thresh1_binary_80.png"
- output_path_2 = "/Users/texnik/Downloads/Новая папка 3/thresh2_trunc_otsu.png"
- output_path_3 = "/Users/texnik/Downloads/Новая папка 3/adaptive_threshold.png"
- cv2.imwrite(output_path_1, thresh1)
- cv2.imwrite(output_path_2, thresh2)
- cv2.imwrite(output_path_3, adaptive_thresh)
- print(f"Результаты сохранены как:\n{output_path_1}\n{output_path_2}\n{output_path_3}")
- cv2.waitKey(0)
- cv2.destroyAllWindows()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement