V4L2:为什么最短曝光时间拍摄的图像看起来比自动曝光模式明亮得多?

V4L2:为什么最短曝光时间拍摄的图像看起来比自动曝光模式明亮得多?

使用默认自动曝光模式捕获图像时:

$ 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-ctlOV5640 芯片的实现问题,不知何故,最小/最大范围可能搞砸了。

相关内容