2016-09-29 4 views
1

Я работаю в проекте Android с использованием OpenCV, и я использую поверхность для реализации собственной камеры, потому что я хочу предоставить пользователю обратную связь о картине, которую они принимают, чтобы помочь им улучшить ее качество. То, что я пытаюсь сделать, - определить, как темное изображение, которое они собираются взять, и предложить им использовать вспышку. Заранее спасибо.Как узнать, слишком ли слишком темное изображение, для которого требуется вспышка, используя OpenCv

+0

Гистограммы очень хороший инструмент, чтобы судить о яркости и контрастности изображения. прочитать что-то о них и как их интерпретировать. кроме того, в Интернете должно быть много ресурсов. просто алгоритм автоматической экспозиции Google, например. вы найдете много статей о том, что происходит в цифровых камерах. Я уверен, что будет и что-то полезное в flash. – Piglet

ответ

1

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

  • размножается время экспозиции по
  • значения деления диафрагмы (или диафрагменного числа) по sqrt (2)
  • умножить набрать по (это добавит некоторый шум)

Теперь, чтобы ответить на этот вопрос, если вы уже знаете, как получить доступ к пикселей в изображении с OpenCV, я сначала рекомендую вам преобразовать его в оттенках серого с помощью cvtColor, то вы можете вычислить (для каждого изображения) сумму интенсивностей пикселей (cv::sum) и определить порог, при котором изображение «слишком темное».

Exemple псевдо кода (это должно быть уточнено в соответствии с вашими потребностями/приложения):

while sum(pixels) < threshold 
    it_nb=0 
    exp_time += 0.1 (second) 
    if it_nb>fixed_limit or if (exp_time/gain cannot be increased anymore) 
     print 'use flash'  
     break 
+0

обратите внимание, что увеличение времени экспозиции также увеличит шум. Я исправил ошибку в вашем ответе. f-number нужно уменьшить, чтобы получить больше света! – Piglet