Изучение различных методов создания двоичных черно-белых изображений с использованием OpenCV

В этой статье блога мы углубимся в различные методы создания двоичных черно-белых изображений с помощью OpenCV. Двоичные изображения — это изображения в оттенках серого, где каждый пиксель либо черный (0), либо белый (255), что указывает на бинарное решение. Преобразуя изображения в двоичные черно-белые изображения, мы можем упростить сложные визуальные данные и выполнять различные задачи компьютерного зрения. Мы рассмотрим несколько методов вместе с примерами кода, которые помогут вам понять и эффективно их реализовать.

Метод 1: простое определение порогов
Самый простой метод преобразования изображения в двоичное черно-белое изображение — использование порогового значения. Идея состоит в том, чтобы выбрать пороговое значение и назначить черный или белый цвет в зависимости от интенсивности пикселей. Вот пример:

import cv2
def simple_threshold(image, threshold):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    _, binary = cv2.threshold(gray, threshold, 255, cv2.THRESH_BINARY)
    return binary
# Load the image
image = cv2.imread('image.jpg')
# Apply simple thresholding
threshold_value = 127
binary_image = simple_threshold(image, threshold_value)
# Display the binary image
cv2.imshow('Binary Image', binary_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Метод 2: Адаптивное пороговое значение
Адаптивное пороговое определение полезно, когда изображение имеет различные условия освещения. Он вычисляет локальный порог для каждого пикселя на основе окружающей окрестности. Вот пример:

import cv2
def adaptive_threshold(image, block_size, constant):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, block_size, constant)
    return binary
# Load the image
image = cv2.imread('image.jpg')
# Apply adaptive thresholding
block_size = 11
constant = 2
binary_image = adaptive_threshold(image, block_size, constant)
# Display the binary image
cv2.imshow('Binary Image', binary_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Метод 3: бинаризация Оцу
Бинаризация Оцу — это метод автоматического определения порога, который определяет оптимальное пороговое значение на основе гистограммы изображения. Это максимизирует межклассовую разницу между пикселями объекта и фона. Вот пример:

import cv2
def otsu_binarization(image):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    _, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    return binary
# Load the image
image = cv2.imread('image.jpg')
# Apply Otsu's binarization
binary_image = otsu_binarization(image)
# Display the binary image
cv2.imshow('Binary Image', binary_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

В этой статье мы рассмотрели различные методы создания бинарных черно-белых изображений с помощью OpenCV. Мы рассмотрели простую пороговую обработку, адаптивную пороговую обработку и методы бинаризации Оцу, приведя примеры кода для каждого из них. Эти методы имеют основополагающее значение для задач обработки изображений и компьютерного зрения, позволяя нам извлекать значимую информацию из сложных визуальных данных.

Освоив эти методы, вы сможете улучшить свое понимание обработки изображений с помощью OpenCV и применить их к широкому спектру приложений в таких областях, как обнаружение объектов, сегментация изображений и т. д.

Не забудьте поэкспериментировать с различными пороговыми значениями и методами, чтобы добиться желаемых результатов для вашего конкретного варианта использования.