ケイエルブイは、ハイパースペクトルカメラ・光学部品・光源など世界中の光学機器を取り扱う専門商社です。

03-3258-1238

お問い合わせ
KLV大学 マシンビジョンコース

USBカメラの「明るさ(Brightness)」調整とは
Python×OpenCVでの設定変更も解説

USBカメラの「明るさ(Brightness)」とは

USBカメラの「明るさ(Brightness)」は、カメラが取得した映像の全体的な明るさのレベルです。
明るさは、カメラの設定で調整が可能で、明るさを上げると映像が全体的に明るくなり、暗い部分がより見やすくなるなど、撮影した映像をより見やすくすることができます。

本記事では、明るさを変えるとどうなるのか、どういう場合に変更するのか、どう変更するのかを解説していきます。

「明るさ(Brightness)」を変更すると画像がどう変わるのか

USBカメラの「明るさ(Brightness)」の設定を変更すると、画像のピクセルのRGB(赤、緑、青)の階調が変化し、画像が明るく見えたり、暗く見えたりするようになります。

RGBの階調とは

デジタルの写真や動画といったデータは、ピクセル(画素)を最小単位とし、ピクセルごとに光の三原色であるRGB(Red, Green, Blue)の階調で表現されます。
そして、RGBの階調は、一般的に8bitで扱われるため、2の8乗の「256段階」で表現されます。
つまり、赤(Red)が0〜255、緑(Green)が0〜255、青(Blue)が0〜255の値を持ち、その組み合わせで色が表現されます。
例えば、赤を表現する場合には、”Red:255、Green:0、Blue:0”、ピンクを表現する際には、”Red:255、Green:100、Blue:150”、というようになります。

what_is_brightness_01.jpg

「明るさ(Brightness)」の変更によるRGBの階調の変化

明るさを上げると、RGB(Red, Green, Blue)の値が一様に増加します。例えば、あるピクセルのRGBの値が(100, 50, 150)である場合、明るさを上げるとRGBの値が(140, 90, 190)のように変化します。この結果、画像全体が明るくなりますが、色相や彩度は変化しません。
逆に、明るさを下げると、RGBの値が(60, 10, 110)というように一様に減少し、画像全体が暗くなります。

what_is_brightness_01.jpg

今回は、RGBの値がそれぞれ一定量変化する例を紹介しましたが、どのように値が変化するかはカメラやソフトウェアの仕様によって異なります。
過度に明るさを変更すると、RGBの値の一部が255の階調を超えてしまい色の歪みが発生することがあるので注意が必要です。

「明るさ(Brightness)」の変更が有効なシチュエーション

撮影状況が理想的でない場合でも、適切な明るさ調整によって高品質な画像を撮影することが可能です。
ここでは、特に「明るさ(Brightness)」の変更が有効な、条件やシチュエーションを紹介します。

1まぶしい屋外や逆光のなど光量が多い時の明るさ調整

まぶしい屋外や光量の多い現場での撮影では、RGBの値が最大値(255)に達してしまい、画面が過度に明るくなりがちです。
また、逆光など光が直接カメラに直接入射する場合はゴーストやフレアも発生しやすくなります。

what_is_brightness_11.jpg

このような場合、明るさの調整が有効です。RGBの値が最大値に近くなっているため、明るさの設定でRGBの値を抑えることで、被写体の色味を忠実に再現できるようになります。

2光量が不足している場合の明るさ調整

光量が不足している環境で動画撮影を行うと、粗い画質や低い彩度・コントラスト、不鮮明な映像になってしまいます。

この際の最も有効な解決策は照明を追加することですが、照明が限られた状況や、照明によって陰影が発生してしまう場合もあるので、カメラの明るさや露出の調整が有効です。

光量が不足している場合は、信号に対してのノイズの割合(S/N比)が大きい状況にあるため、明るさの調整だけではノイズが目立つ映像になる可能性がある点に注意してください。

3被写体が黒や白主体の場合の明るさ調整

黒や白の被写体が大部分を占める場合、カメラの自動露出はそれらの色に過剰に反応し、極端な露出設定になり、それ以外の場所が見えにくくなる場合があります。

この際には、露光だけではなく、明るさもわせて調整することで、全体のバランスを撮ることができます。

例えば、ICチップなどで、ほとんどが黒いチップである場合には、金属でできたチップの足が明るすぎてうまく撮影できないことがあります。
このような場合には、明るさをあらかじめマイナスに補正しておくと、足の部分の明るさが抑えられて、狙い通りの画像を得ることができます。

Python×OpenCVでの「明るさ(Brightness)」の変更方法

カメラの設定で取得する画像の「明るさ(Brightness)」を変更する方法と、取得した画像への後処理で「明るさ(Brightness)」を変更する方法を紹介します。

カメラの明るさを変更

OpenCVでカメラの「明るさ(Brightness)」設定を変更するには、"cv2.CAP_PROP_BRIGHTNESS"を使用します。

サンプルコード
import cv2

# カメラを設定
cap = cv2.VideoCapture(0) 

# カメラの明るさを調整
cap.set(cv2.CAP_PROP_BRIGHTNESS, ”設定値”) 

# カメラから画像を読み込む
ret, frame = cap.read() 

# 画像を表示する
cv2.imshow("Camera Frame", frame) 

このように、画像取得のコマンド”cap.read()”の前に、cap.set(cv2.CAP_PROP_BRIGHTNESS,”設定値”)を設定することで、カメラの明るさを調整することが可能です。
CAP_PROP_BRIGHTNESSのデフォルト値や設定できる範囲は、カメラデバイスやドライバに依存するため、カメラの仕様を確認してください。

Linuxの場合は、v4l2でUSBカメラの設定のデフォルト値や設定できる範囲を確認できるので、以下の記事も参考にしてください。

v4l2でUSBカメラの設定可能パラメータと範囲を確認

カメラで取得した画像の明るさを後処理で変更

取得画像を加工した上で「明るさ」を変更したい場合 や カメラの設定値を超えて「明るさ」を変更したい場合 には、cv2.convertScaleAbsコマンドを使用して特定画像のRGB値を変更することが可能です。

import cv2

# カメラを設定
cap = cv2.VideoCapture(0) 

# カメラから画像を読み込む
ret, frame = cap.read() 

# カメラの明るさを変更
brightened_frame = cv2.convertScaleAbs(frame, alpha=1.0, beta=”設定値”)

# 画像を表示する
cv2.imshow("Camera Frame", brightened_frame) 

brightened_frame = cv2.convertScaleAbs(frame, alpha=1.0, beta=”設定値”)を実行すると、RGB の各チャンネルの値が”設定値に設定した値”だけ増加または減少します。

よって、ret, frame = cap.read()コマンドで、frameに画像を格納した後に、
brightened_frame = cv2.convertScaleAbs(frame, alpha=1.0, beta=”設定値”)を実行するだけで明るさを変更できます。
通常、RGBの値は 0 から 255 の範囲なので、これを超えるような値は設定しないよう注意して下さい。

まとめ

本記事では、明るさを変更するとどうなるのか、どういう場合に変更するのか、どう変更するのかを解説しました。

  • 「明るさ(Brightness)」を明るくするとRGBの値がそれぞれ大きく、暗くするとRGBの値がそれぞれ小さくなる。
  • 「明るさ(Brightness)」の変更は、画像全体が明るすぎる場合や暗すぎる場合に有効
  • 「明るさ(Brightness)」はOpenCVのコマンドを用いて簡単に変更することが可能

実際の現場では、「明るさ(Brightness)」の設定だけではなく、光源の調整はもちろん、露光(Exposure)や絞りなどの他のカメラの設定も合わせて調整することで、より高品質な画像を得ることができます。

製品紹介

ケイエルブイは、「明るさ(Brightness)」を変更可能な、「超小型」の産業用USBカメラを取り扱っています。

製造はドイツの光学機器メーカーOptikron(オプティクロン)社。同社の超小型カメラは医療技術、計測技術、マイクロレーザー技術、高度な技術力が要求される分野で活用されています。

Optikron超小型カメラ

用語集

マシンビジョンコース

ご質問・ご相談お気軽にお問い合せください

お電話でのお問合せ 03-3258-1238 受付時間 平日9:00-18:00(土日祝日除く)
Webでのお問い合わせ