Определение яркости / яркости изображения - PullRequest
7 голосов
/ 02 февраля 2011

Мое приложение iphone захватывает данные с камеры в режиме реального времени с помощью AVCaptureSession AVFoundation. Я могу получить доступ к этим данным в методе делегата во время выполнения и создать из него изображение. Это может быть CGImage, UIImage или просто необработанные данные (CMSampleBufferRef).

Я пытаюсь рассчитать яркость, яркость этих данных (изображение). Или это может быть какое-то другое значение, которое может указывать мне, насколько ярким является входной свет.

Есть ли стандартный способ получить это значение? Возможно использование OpenGL.

Заранее спасибо.

1 Ответ

13 голосов
/ 02 февраля 2011

Просто конвертируйте ваше изображение в формат YUV и рассчитайте среднее значение канала яркости. Преобразование цветов является типичной операцией, и любая приличная структура обработки изображений поддерживает это. Например, OpenCV (вы сказали OpenGL, но это не имеет ничего общего с обработкой изображений, я предполагаю, что вы имели в виду OpenCV) имеет CvtColor .

Если у вас нет такой удобной структуры, но есть доступ к интенсивности пикселей, вы можете использовать уравнение:

Y' = 0.299*R + 0.587*G + 0.144*B

, чтобы получить канал яркости, а затем рассчитать среднее. R, G и B обозначают красный, зеленый и синий каналы соответственно.

EDIT

Обратите внимание, что ваша камера может компенсировать яркие / темные сцены, изменяя диафрагму. Это зависит от камеры, но я думаю, что большинство камер делают это - иначе ваши снимки могут оказаться либо насыщенными (чисто белыми), либо просто черными - в любом случае, бесполезными. Человеческие глаза на самом деле делают то же самое .

Недостатком является то, что трудно определить, находитесь ли вы в темноте или на свету, просто взглянув на изображение. В этом случае вам, возможно, придется выйти за пределы изображения и запросить камеру. Теоретически вы можете сделать это либо напрямую через драйвер (маловероятно), либо, возможно, просмотрев метаданные изображения (например, в формате JPEG, есть EXIF ​​).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...