機械学習で使うためにPythonからOpenCVを使ってカメラ画像を取得していた。 この際、取得した画像が暗くなってしまう問題に悩まされていた。 以下のような感じだ。
これではとても使えない。 結局ちょっとしたことで解決したので解決策をコードとともに載せておく。
そもそも初めのコードは以下のような感じだった。以下のコードでは本質的な部分だけを抽出している。
import cv2 cap = cv2.VideoCapture(0) _, frame = cap.read() cv2.imwrite('frog.png', frame)
これを実行すると先に挙げたように以下のような感じで暗くなってしまう。 どうやらホワイトバランスや明るさの調整がされていない状態にあるようだった。
解決策として、画像を取得する前に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を入れることで以下のように綺麗な画像を取得することができた。
どうやらコードを起動してすぐに画像を取得すると、カメラ側の準備が終わっていなかったために画像が暗くなってしまったようだ。 本当にちょっとしたことなのだが、ハマると結構時間を喰ってしまう。この記事を見ることですぐに解決することができれば幸いだ。