Ahogrammer

Deep Dive Into NLP, ML and Cloud

OpenCVでカメラ画像を取得したときの画像が暗かったのを直した話

機械学習で使うためにPythonからOpenCVを使ってカメラ画像を取得していた。 この際、取得した画像が暗くなってしまう問題に悩まされていた。 以下のような感じだ。 f:id:Hironsan:20170608150131p:plain

これではとても使えない。 結局ちょっとしたことで解決したので解決策をコードとともに載せておく。 f:id:Hironsan:20170608150145p:plain

そもそも初めのコードは以下のような感じだった。以下のコードでは本質的な部分だけを抽出している。

import cv2

cap = cv2.VideoCapture(0)
_, frame = cap.read()
cv2.imwrite('frog.png', frame)

これを実行すると先に挙げたように以下のような感じで暗くなってしまう。 どうやらホワイトバランスや明るさの調整がされていない状態にあるようだった。 f:id:Hironsan:20170608150131p:plain

解決策として、画像を取得する前にsleepを入れてやると綺麗な画像を取得できた。コードは以下のような感じ。 前のコードと違うのは、time.sleep(2)を入れているところだけ。

import time
import cv2

cap = cv2.VideoCapture(0)
# warm up                                                                          
# time.sleep(2)                                                                    
_, frame = cap.read()
cv2.imwrite('frog.png', frame)

こうしてsleepを入れることで以下のように綺麗な画像を取得することができた。 f:id:Hironsan:20170608150145p:plain

どうやらコードを起動してすぐに画像を取得すると、カメラ側の準備が終わっていなかったために画像が暗くなってしまったようだ。 本当にちょっとしたことなのだが、ハマると結構時間を喰ってしまう。この記事を見ることですぐに解決することができれば幸いだ。