На изображении task2.png с помощью OpenCV оставить только круг с самым насыщенным цветом, остальные части изображения сделать черно-белыми

  • Главная
  • Информатика
  • Python
  • На изображении task2.png с помощью OpenCV оставить только круг с самым насыщенным цветом, остальные части изображения сделать черно-белыми
Предмет: Программирование на Python
Раздел: Компьютерное зрение (OpenCV)
Задание: На изображении task2.png с помощью OpenCV оставить только круг с самым насыщенным цветом, остальные части изображения сделать черно-белыми.
Какие шаги мы будем выполнять:
  1. Загрузим изображение task2.png.
  2. Определим объекты, похожие на круги, с помощью метода Хафа.
  3. Найдем круг с самым насыщенным цветом (по критерию насыщенности в цветовом пространстве HSV).
  4. Преобразуем остальные части изображения в черно-белое, кроме круга с самым высоким уровнем насыщенности.
  5. Сохраним результат в новый файл.
Подробное решение
  1. Импорт библиотек: Для работы с изображениями используется библиотека OpenCV. Также импортируем numpy для работы с массивами.
    import cv2
    import numpy as np
  2. Загрузка изображения:
    image = cv2.imread('task2.png')
  3. Преобразование изображения в градации серого:
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  4. Использование метода Хафа для нахождения кругов: Метод Хафа используется для нахождения кругов в изображении.
    circles = cv2.HoughCircles(
        gray,
        cv2.HOUGH_GRADIENT,
        dp=1,
        minDist=30,
        param1=50,
        param2=30,
        minRadius=10,
        maxRadius=100
    )
    Этот код ищет круги на изображении. Важно правильно подобрать параметры для нахождения кружков.
  5. Преобразование картинки в цветовое пространство HSV: Цветовое представление HSV удобно для определения насыщенности цвета:
    hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
  6. Поиск круга с наибольшей насыщенностью цвета: Если круги найдены, мы определим наиболее насыщенный пиксель в пределах каждого из них.
    if circles is not None:
        circles = np.uint16(np.around(circles))
        max_saturation = -1
        best_circle = None
        for circle in circles[0, :]:
            center_x, center_y, radius = circle
            mask = np.zeros_like(gray)
            cv2.circle(mask, (center_x, center_y), radius, 255, thickness=-1)
            mask_hsv = cv2.bitwise_and(hsv_image, hsv_image, mask=mask)
            # Извлекаем максимальную насыщенность (2-й канал будет насыщенностью)
            saturation_channel = mask_hsv[:, :, 1]
            max_sat = np.max(saturation_channel)
            if max_sat > max_saturation:
                max_saturation = max_sat
                best_circle = circle
  7. Преобразование остальной части изображения в черно-белое: Мы делаем так, чтобы оставался только круг в цвете, в то время как остальная часть изображения будет черно-белой:
    # Создаем черно-белое изображение
    gray_colored = cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR)
    if best_circle is not None:
        center_x, center_y, radius = best_circle
        # Создаем маску для оставления одного круга
        mask = np.zeros_like(gray)
        cv2.circle(mask, (center_x, center_y), radius, (255, 255, 255), thickness=-1)
        # Закрашиваем области вне круга черно-белым вариантом изображения
        result = np.where(mask[:, :, np.newaxis] > 0, image, gray_colored)
    else:
        result = gray_colored
  8. Сохранение результата: Сохраняем итоговое изображение с кромкой нужного круга.
    cv2.imwrite('result.png', result)
### Сокращенное объяснение: - Мы используем метод Хафа для нахождения кругов на изображении. - Преобразуем изображение в цветовую модель HSV, чтобы извлечь насыщенность для каждого круга. - Круг с наибольшей насыщенностью остаётся цветным, остальные части изображения становятся черно-белыми. ### Вывод: Задача относится к компьютерному зрению с использованием Python и библиотеки OpenCV. Мы успешно реализовали поиск кругов, их анализ на насыщенность и преобразование части изображения в черно-белый формат.
Не нашли нужного вам решения? Оставьте заявку и наши авторы быстро и качественно помогут вам с решением.
Оставить заявку
Работа вам нужна срочно. Не волнуйтесь, уложимся!

Заполните, пожалуйста, данные для автора:

  • 22423 авторов готовы помочь тебе.
  • 2402 онлайн