Задать вопрос
@de4fen1ng

Как получить яркость изображения?

Всем привет ! у меня есть изображение 8192х8129 . У меня стоит задача разбить это изображение на разделы 256х256 и получить среднюю яркость каждого блока (256х256). Подскажите как это сделать ?
  • Вопрос задан
  • 2090 просмотров
Подписаться 1 Средний 2 комментария
Решения вопроса 3
@Andy_U
Aleksandr Makarov, Вы совершенно правильно сомневаетесь. Почитайте, например, вот эту статью: 1.

Или вот тут есть рецепт: 2
Ответ написан
Комментировать
samodum
@samodum
Какой вопрос - такой и ответ
Чтобы получить среднюю яркость цветного изображения надо пройтись по всему блоку и по каждой компоненте R G и B отдельно посчитать сумму. После этого каждую sumR, sumG и sumB разделить на количество пикселей в блоке, в данном случае это 256^2. Это и будут компоненты нового цвета
Ответ написан
Комментировать
adugin
@adugin Куратор тега Python
import numpy as np
from skimage.util import view_as_windows  # Библиотека scikit-image

tsize = 256
image = np.random.randint(0, 256, (8192, 8192, 3), np.uint8)

# Значения яркости - это канал L из пространства LAB
lab_l_channel = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)[..., 0]

# Плитки 256x256
tiles = view_as_windows(lab_l_channel, (tsize, tsize), (tsize, tsize))

# Примечательно, что
assert np.shares_memory(lab_l_channel, tiles) == True

# Средняя яркость в виде матрицы 32х32
lightness = tiles.reshape(-1, tsize ** 2).mean(axis=-1).reshape(np.array(image.shape[:2]) // tsize)

P.S. Вместо skimage.util.view_as_windows можно использовать numpy.lib.stride_tricks.as_strided, но это весьма сложная в настройке правильных параметров функция; view_as_windows - её гуманный вариант)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы