Bash Site about Linux


Вернуться к оглавлению

Web-камера и баланс белого




При использовании web-камеры в вечернее время, при свете энергосберегающих ламп тёплых тонов, цветовой температуры 2700...3300K (тёплый белый или тёплый жёлтый), изображение может быть залито жёлтым цветом. Даже фотографии с хорошего фотоаппарата при таком освещении имеют желтизну. Что уж говорить о простенькой встроенной веб-камере.


Вот так воспроизводит меня веб-камера нетбука ASUS1005pxd:



Поначалу пробовал различные GUI-шные приложения для настройки (типа camorama и т.п.), но желаемого результа достигнуть не удалось.



Как будем устранять:

1. Устанавливаем, если ещё не стоит v4l-utils
2. Используем команду v4l2-ctl -L или v4l2-ctl --list-ctrls, чтобы увидеть список доступных настроек.
[shonty@~]$ v4l2-ctl -L
                     brightness (int)    : min=-127 max=127 step=1 default=0 value=0
                       contrast (int)    : min=0 max=64 step=1 default=32 value=32
                     saturation (int)    : min=0 max=127 step=1 default=55 value=55
                            hue (int)    : min=-40 max=40 step=1 default=0 value=0
 white_balance_temperature_auto (bool)   : default=1 value=1
                          gamma (int)    : min=100 max=500 step=1 default=220 value=220
                           gain (int)    : min=0 max=3 step=1 default=0 value=0
           power_line_frequency (menu)   : min=0 max=2 default=2 value=2
				0: Disabled
				1: 50 Hz
				2: 60 Hz
      white_balance_temperature (int)    : min=2800 max=6500 step=10 default=5500 value=5500 flags=inactive
                      sharpness (int)    : min=0 max=4 step=1 default=1 value=1
         backlight_compensation (int)    : min=1 max=2 step=1 default=1 value=1
                  exposure_auto (menu)   : min=0 max=3 default=3 value=3
				1: Manual Mode
				3: Aperture Priority Mode

3. Настраиваемых параметров много (и возможно вы захотите поиграть с некоторыми). Но нас сейчас интересуют толко два:
  • white_balance_temperature_auto - авто или ручная установка цветовой температуры (баланса белого)
  • white_balance_temperature - значение цветовой температуры (баланса белого)

Отключаем автоматическое определение баланса белого:
[shonty@~]$ v4l2-ctl --set-ctrl white_balance_temperature_auto=0
Для приблизительного определения цветовой температуры используем таблицу:

1000 K 2000 K 3000 K 4000 K 5000 K 6000 K 7000 K 8000 K 9000 K 10000 K


Чем теплее тона -тем ниже температура, чем холоднее - тем выше. Я задаю 2800 - минимальную из доступного диапазона (см. вывод команды v4l2-ctl -L)
[shonty@~]$ v4l2-ctl --set-ctrl white_balance_temperature=2800

Проверяем:
[shonty@~]$ mplayer -fps 15 tv://




Эти изменённые настройки будут действительны до перезагрузки или до конца сессии. Поэтому следующим шагом будет оформление достигнутого в скрипт.


Первый вариант - это изменять настройки при загрузке:

Ваяем скрипт:
#!/bin/bash
sleep 120
v4l2-ctl --set-ctrl white_balance_temperature_auto=0
v4l2-ctl --set-ctrl white_balance_temperature=2800

и прописываем его в автозагрузку.


Второй вариант скрипта:

Если предполагается изменять параметры не автоматически а в ручную, то создаём скрипт wb
#!/bin/bash
PS3='Выберете из списка: '
ColorTemperature=$1
# Проверка входного параметра:
if [ -z "$1" ]
then
  # Если параметр не задан, то выбираем из списка: 
  select ColorTemperature in "2800" "3600" "4500" "5500" "6500"
  do
  break  
  done
fi
v4l2-ctl --set-ctrl white_balance_temperature_auto=0
v4l2-ctl --set-ctrl white_balance_temperature=$ColorTemperature
echo "Параметры веб-камеры изменены:"
echo "цветовая температура установлена в значение $ColorTemperature"
echo 


Делаем его исполняемым и помещаем в пользовательскую директорию, прописанную в переменной $PATH (у меня естественно ~/bin). Скрипт запускается с параметрами принимающими значения от 2800 до 6500 с шагом 10.
[shonty@~]$ wb 3300
Параметры веб-камеры изменены:
цветовая температура установлена в значение 3300

Если скрипт запустить без параметров, то желаемую температуру можно выбрать из списка:
[shonty@~]$ wb
1) 2800
2) 3600
3) 4500
4) 5500
5) 6500
Выберете из списка: 4
Параметры веб-камеры изменены:
цветовая температура установлена в значение 5500

При желании можно добавить в скрипты изменение других настроек (яркость, контраст, резкость...). Возможно вывод комады v4l2-ctl -L будет отличный от моего, тогда скрипты нужно подредактировать в соответствии с вашими параметрами.


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

[shonty@~]$ v4l2-ctl --all
и
[shonty@~]$ v4l2-ctl --help

В заключении хотелось бы дополнить, что все команды приведены с учётом того, что к компьютеру подключена только одна веб-камера.

[shonty@~]$ ls /dev | grep video
video0

В случае, если их больше, то в командах необходимо прописывать и устройство, используя опцию -d например:

[shonty@~]$ v4l2-ctl -d /dev/video0 -c white_balance_temperature=2800



Вернуться к оглавлению







Яндекс.Метрика
ВебСтолица.РУ: создай свой бесплатный сайт!  | Пожаловаться  
Движок: Amiro CMS