OpenCV / v4l2で、Webカメラ露出固定にして、かつフリッカーを抑える方法
v4l2-ctlから露出時間を設定すると、フリッカーがどうしても発生してしまう。そんな時は、一度自動露出でフリッカーの無い映像を取れる状態にした後に、露出モードだけを変更して露出固定にすれば、、、、よい。たぶん。
OpenCVから露出調整するのではなく、v4l2-ctlから設定するのがいいみたい。
OpenCVを使ってて、Webカメラの露出を固定したいとき、ありますよね。
OpenCVからもいじれそう。。。と思って調べてたんだけど、 どうにもいうことを聞いてくれない。
じゃぁ、もう、いいや。
ってことで、v4l2-ctlから設定することに。
で、露出固定にして、露出時間をいじると、なぜかどうしてもフリッカーがのる。
そりゃもう、盛大にのる。
ちらちらしてて、ほんと使えない。
どうしようもないのかー、と諦めそうになったんだけど、 自動露出だとフリッカーがおさえられた映像がとれるので、 一度自動露出にした後に、露出モードだけ変更することに。
import cv2 import subprocess cap = cv2.VideoCapture(0) cmd='v4l2-ctl -d /dev/video0 -c exposure_auto=3' # 自動露出 ret = subprocess.check_output([cmd],shell=True) # 設定した後にすぐ変更するとうまく反映されないので、10回程度ムダにカメラ回す _ = [cap.read()[:1] for in in range(10)] cmd='v4l2-ctl -d /dev/video0 -c exposure_auto=1' # 現状で露出固定 ret = subprocess.check_output([cmd],shell=True)
これでいいのかなぁ。。。と思いつつも、動いてるから、まぁ、いいや。