Яркость и контрастность
Яркость и контрастность являются важными характеристиками изображения, которые существенно влияют на его восприятие и качество. Эти параметры можно регулировать для улучшения видимости деталей, подготовки изображений для анализа, устранения недостатков съемки и других задач.
Возьмем исходное изображение и проведем с ним несколько экспериментов:
- Яркость: Общий уровень освещенности изображения. Увеличение яркости делает изображение светлее, а уменьшение — темнее.
- Контрастность: Разница между самыми темными и самыми светлыми частями изображения. Высокая контрастность делает изображение более "живым", а низкая — более "плоским".
Изменение яркости изображения осуществляется путем добавления или вычитания определенного значения ко всем пикселям изображения.
-
Увеличение яркости: Когда мы добавляем положительное значение ко всем пикселям изображения, оно становится светлее. Например, добавление значения +100 к каждому пикселю приведет к заметному осветлению изображения.
-
Уменьшение яркости: Когда мы вычитаем значение из каждого пикселя, изображение становится темнее. Например, вычитание значения -100 приведет к затемнению изображения.
Изменение контрастности изображения осуществляется путем умножения или деления значения яркости каждого пикселя на определенный коэффициент.
-
Увеличение контрастности: Когда мы умножаем значение яркости каждого пикселя на коэффициент больше 1, изображение становится более контрастным. Темные участки становятся темнее, а светлые — светлее. Например, умножение на коэффициент 1.5 увеличивает контрастность.
-
Уменьшение контрастности: Когда мы умножаем значение яркости каждого пикселя на коэффициент меньше 1, изображение становится менее контрастным. Разница между темными и светлыми участками становится меньше, картинка становится более "плоской".
Важно, что при изменении параметров яркости и контрастности нужно ограничивать выход значений за пределы от 0 до 255 с помощью функции np.clip(image, 0, 255)
, мы ее подробно разбирали в уроке по NumPy.
Пример скрипта для регулировки яркости и контрастности методами NumPy:
import cv2
import numpy as np
def adjust_brightness(image, brightness=0):
new_image = np.int16(image)
new_image = new_image + brightness
new_image = np.clip(new_image, 0, 255)
return np.uint8(new_image)
def adjust_contrast(image, contrast=1.0):
new_image = np.int16(image)
new_image = new_image * contrast
new_image = np.clip(new_image, 0, 255)
return np.uint8(new_image)
# Загрузка изображения
image = cv2.imread('orig.png')
# Изменение яркости
bright_image = adjust_brightness(image, 100)
dark_image = adjust_brightness(image, -100)
# Сохранение результатов
cv2.imwrite('bright_image.png', bright_image)
cv2.imwrite('dark_image.png', dark_image)
# Изменение контрастности
high_contrast_image = adjust_contrast(image, 1.5)
low_contrast_image = adjust_contrast(image, 0.5)
# Сохранение результатов
cv2.imwrite('high_contrast_image.png', high_contrast_image)
cv2.imwrite('low_contrast_image.png', low_contrast_image)
Изменение яркости и контрастности с использованием OpenCV
Методы OpenCV также предоставляют эффективные средства для регулировки яркости и контрастности изображений. Вот пример, как можно изменить эти параметры с помощью функций OpenCV:
Изменение яркости и контрастности с использованием OpenCV
Изменение яркости и контрастности изображения можно также реализовать с использованием функций OpenCV. Для этого используется функция cv2.convertScaleAbs
, которая позволяет масштабировать, смещать и обрезать значения пикселей.
Пример скрипта для регулировки яркости и контрастности методами OpenCV:
import cv2
# Загрузка изображения
image = cv2.imread('orig.png')
# Изменение яркости и контрастности
bright_image_opencv = cv2.convertScaleAbs(image, beta=100)
dark_image_opencv = cv2.convertScaleAbs(image, beta=-100)
high_contrast_image_opencv = cv2.convertScaleAbs(image, alpha=1.5)
low_contrast_image_opencv = cv2.convertScaleAbs(image, alpha=0.5)
# Сохранение результатов
cv2.imwrite('bright_image_opencv.jpg', bright_image_opencv)
cv2.imwrite('dark_image_opencv.jpg', dark_image_opencv)
cv2.imwrite('high_contrast_image_opencv.jpg', high_contrast_image_opencv)
cv2.imwrite('low_contrast_image_opencv.jpg', low_contrast_image_opencv)
alpha
(контрастность): Коэффициент, на который умножается каждое значение пикселя.
beta
(яркость): Значение, которое добавляется к каждому пикселю после умножения.
- Функция
cv2.convertScaleAbs
выполняет эти операции и возвращает обрезанное изображение в диапазоне от 0 до 255.
Таким образом, используя методы как NumPy, так и OpenCV, мы можем эффективно регулировать яркость и контрастность изображений, улучшая их качество и подготовку для дальнейшего анализа.