使用默认自动曝光模式捕获图像时:
$ v4l2-ctl -d0 --set-fmt-video=width=width,height=height,pixelformat=MJPG --stream-mmap --stream-to=auto_expo.jpg --stream-count=1
auto_expo.jpg 显示:
但是,当使用手动曝光拍摄图像时,使用尽可能短的曝光值 4:
$ v4l2-ctl -d0 -c exposure_auto=1
$ v4l2-ctl -d0 -c exposure_absolute=4
$ v4l2-ctl -d0 --set-fmt-video=width=width,height=height,pixelformat=MJPG --stream-mmap --stream-to=manual_expo.jpg --stream-count=1
Manual_expo.jpg 显示
之前的 V4L2 值:
$ v4l2-ctl -d0 --list-ctrls
brightness 0x00980900 (int) : min=0 max=15 step=1 default=8 value=8
contrast 0x00980901 (int) : min=0 max=15 step=1 default=8 value=8
saturation 0x00980902 (int) : min=0 max=15 step=1 default=7 value=7
hue 0x00980903 (int) : min=-10 max=10 step=1 default=0 value=0
white_balance_temperature_auto 0x0098090c (bool) : default=1 value=1
gamma 0x00980910 (int) : min=1 max=10 step=1 default=7 value=7
gain 0x00980913 (int) : min=0 max=0 step=0 default=0 value=0
power_line_frequency 0x00980918 (menu) : min=0 max=2 default=2 value=2
white_balance_temperature 0x0098091a (int) : min=2800 max=6500 step=1 default=2800 value=2800 flags=inactive
sharpness 0x0098091b (int) : min=0 max=15 step=1 default=6 value=6
backlight_compensation 0x0098091c (int) : min=0 max=1 step=1 default=0 value=0
exposure_auto 0x009a0901 (menu) : min=0 max=3 default=3 value=3
exposure_absolute 0x009a0902 (int) : min=4 max=5000 step=1 default=625 value=625 flags=inactive
focus_absolute 0x009a090a (int) : min=0 max=21 step=1 default=16 value=16 flags=inactive
focus_auto 0x009a090c (bool) : default=1 value=1
之后的 V4L2 值:
$ v4l2-ctl -d0 --list-ctrls
brightness 0x00980900 (int) : min=0 max=15 step=1 default=8 value=8
contrast 0x00980901 (int) : min=0 max=15 step=1 default=8 value=8
saturation 0x00980902 (int) : min=0 max=15 step=1 default=7 value=7
hue 0x00980903 (int) : min=-10 max=10 step=1 default=0 value=0
white_balance_temperature_auto 0x0098090c (bool) : default=1 value=1
gamma 0x00980910 (int) : min=1 max=10 step=1 default=7 value=7
gain 0x00980913 (int) : min=0 max=0 step=0 default=0 value=0
power_line_frequency 0x00980918 (menu) : min=0 max=2 default=2 value=2
white_balance_temperature 0x0098091a (int) : min=2800 max=6500 step=1 default=2800 value=2800 flags=inactive
sharpness 0x0098091b (int) : min=0 max=15 step=1 default=6 value=6
backlight_compensation 0x0098091c (int) : min=0 max=1 step=1 default=0 value=0
exposure_auto 0x009a0901 (menu) : min=0 max=3 default=3 value=1
exposure_absolute 0x009a0902 (int) : min=4 max=5000 step=1 default=625 value=4
focus_absolute 0x009a090a (int) : min=0 max=21 step=1 default=16 value=16 flags=inactive
focus_auto 0x009a090c (bool) : default=1 value=1
答案1
exposure_absolute 0x009a0902 (int) : min=4 max=5000 step=1 default=625 value=4
这表明曝光来自1/4其次1/5000第二个可用。您实际上选择了最长的 (4=>1/4) 曝光,而不是最短的曝光。
答案2
相机是否有OV5640芯片?我可以在 Linux 系统上使用这样的相机芯片准确地重现您所描述的行为。
奇怪的是:同样的相机在使用 的 Windows 系统上根本没有亮度设置问题AForge.Video.DirectShow
。
由于v4l2-ctl
获取/设置曝光属性与其他相机配合得很好,根本原因似乎是v4l2-ctl
OV5640 芯片的实现问题,不知何故,最小/最大范围可能搞砸了。