【问题标题】:V4L2 absolute exposure setting has (almost) not effectV4L2 绝对曝光设置(几乎)没有效果
【发布时间】:2020-08-18 05:22:25
【问题描述】:

我正在尝试手动控制相机的曝光,但该设置只是短暂启用,但显然自动模式似乎仍处于启用状态,正如我在相机图像上看到的那样。

我的相机有以下控件:

v4l2-ctl --list-ctrls-menus
                     brightness 0x00980900 (int)    : min=-127 max=128 step=1 default=0 value=0
                       contrast 0x00980901 (int)    : min=0 max=30 step=1 default=15 value=15
                     saturation 0x00980902 (int)    : min=0 max=127 step=1 default=54 value=54
                            hue 0x00980903 (int)    : min=-180 max=180 step=1 default=0 value=0
 white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
                          gamma 0x00980910 (int)    : min=20 max=250 step=1 default=88 value=88
                           gain 0x00980913 (int)    : min=0 max=10 step=1 default=0 value=0
           power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=1 value=1
                0: Disabled
                1: 50 Hz
                2: 60 Hz
      white_balance_temperature 0x0098091a (int)    : min=2500 max=7000 step=1 default=6000 value=6000 flags=inactive
                      sharpness 0x0098091b (int)    : min=0 max=60 step=1 default=10 value=10
         backlight_compensation 0x0098091c (int)    : min=0 max=2 step=1 default=0 value=0
                  exposure_auto 0x009a0901 (menu)   : min=0 max=3 default=3 value=1
                1: Manual Mode
                3: Aperture Priority Mode
              exposure_absolute 0x009a0902 (int)    : min=78 max=1250 step=1 default=312 value=1250
         exposure_auto_priority 0x009a0903 (bool)   : default=0 value=0

我设置并验证,同时通过基本的opencv 查看器观看图像,它不做任何控制:

# Verify initial setting
$ v4l2-ctl -C exposure_auto
exposure_auto: 3

# Set auto-exposure to "Manual exposure time, manual iris."
$ v4l2-ctl -c exposure_auto=1

# Verify that manual setting is active
$ v4l2-ctl -C exposure_auto
exposure_auto: 1

# Set an absolute exposure value
$ v4l2-ctl -c exposure_absolute=1000

# Verify set absolute exposure
$ v4l2-ctl -C exposure_absolute
exposure_absolute: 1000

我也使用exposure_auto_priority 设置。

但是,当我改变曝光时,我可以很快看到来自相机的图像的效果,然后似乎立即回到“自动”模式。 IE。相机正在自动调整亮度。

当我使用guvcview 时,我观察到的效果相同,它基本上为上述每个控件提供了一个滑块。当我更改曝光时,它会短暂应用,但随后似乎会应用自动曝光。虽然设置本身可以确认为已设置(使用v4l2-ctl -C ...)。

禁用white_balance_temperature_auto 有效,我还尝试调整任何其他值,但我找不到任何对曝光的依赖。

是什么原因推翻了手动曝光设置?

更新

一些系统信息:

内核:

$ uname -r
5.3.0-51-generic
cat /proc/version
Linux version 5.3.0-51-generic (buildd@lgw01-amd64-034) (gcc version 9.2.1 20191008 (Ubuntu 9.2.1-9ubuntu2)) #44-Ubuntu SMP Wed Apr 22 21:09:44 UTC 2020

媒体:

$ media-ctl -p
Failed to enumerate /dev/media0 (-13)

$ ls /dev/media* 
/dev/media0  /dev/media1  /dev/media2

V4L2:

$ v4l2-ctl --all
Driver Info:
    Driver name      : uvcvideo
    Card type        : HBV HD CAMERA: HBV HD CAMERA
    Bus info         : usb-0000:05:00.3-1.1
    Driver version   : 5.3.18
    Capabilities     : 0x84a00001
        Video Capture
        Metadata Capture
        Streaming
        Extended Pix Format
        Device Capabilities
    Device Caps      : 0x04200001
        Video Capture
        Streaming
        Extended Pix Format
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
    Width/Height      : 1920/1080
    Pixel Format      : 'MJPG' (Motion-JPEG)
    Field             : None
    Bytes per Line    : 0
    Size Image        : 4147200
    Colorspace        : sRGB
    Transfer Function : Default (maps to sRGB)
    YCbCr/HSV Encoding: Default (maps to ITU-R 601)
    Quantization      : Default (maps to Full Range)
    Flags             : 
Crop Capability Video Capture:
    Bounds      : Left 0, Top 0, Width 1920, Height 1080
    Default     : Left 0, Top 0, Width 1920, Height 1080
    Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 1920, Height 1080, Flags: 
Selection: crop_bounds, Left 0, Top 0, Width 1920, Height 1080, Flags: 
Streaming Parameters Video Capture:
    Capabilities     : timeperframe
    Frames per second: 30.000 (30/1)
    Read buffers     : 0
                     brightness 0x00980900 (int)    : min=-127 max=128 step=1 default=0 value=0
                       contrast 0x00980901 (int)    : min=0 max=30 step=1 default=15 value=15
                     saturation 0x00980902 (int)    : min=0 max=127 step=1 default=54 value=54
                            hue 0x00980903 (int)    : min=-180 max=180 step=1 default=0 value=0
 white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
                          gamma 0x00980910 (int)    : min=20 max=250 step=1 default=88 value=88
                           gain 0x00980913 (int)    : min=0 max=10 step=1 default=0 value=0
           power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=1 value=1
      white_balance_temperature 0x0098091a (int)    : min=2500 max=7000 step=1 default=6000 value=6000 flags=inactive
                      sharpness 0x0098091b (int)    : min=0 max=60 step=1 default=10 value=10
         backlight_compensation 0x0098091c (int)    : min=0 max=2 step=1 default=0 value=0
                  exposure_auto 0x009a0901 (menu)   : min=0 max=3 default=3 value=3
              exposure_absolute 0x009a0902 (int)    : min=78 max=1250 step=1 default=312 value=312 flags=inactive
         exposure_auto_priority 0x009a0903 (bool)   : default=0 value=1

【问题讨论】:

  • 能否给出内核版本以及v4l2-ctl --allmedia-ctl -p的输出?
  • 感谢@dafnahaktana,完全忘记了一些系统信息——我将这些信息添加到更新的描述中。

标签: opencv camera webcam v4l2


【解决方案1】:

查看 UVC 类规范中的 Exposure Time (Absolute) Control,您可以从 usb.org 找到该规范。我引用了下面的规范版本 1.5。

请注意,手动曝光控制进一步受到帧的限制 间隔,它总是具有更高的优先级。如果帧间隔是 更改为低于曝光控制当前值的值, 曝光控制值将自动更改。默认 曝光控制值将是当前帧间隔,直到 选择了明确的曝光值。

所以,这解释了您所看到的。绝对曝光时间以 100µs 为单位。您的默认值为 312,即 31200µs,这给出了 ~32 的帧速率。

exposure_absolute 0x009a0902 (int)    : min=78 max=1250 step=1 default=312 value=312 flags=inactive

Frames per second: 30.000 (30/1)

您将绝对曝光时间设置为 1000,即 100000µs。这会生效,但随后帧间隔(31200µs)优先,它会回落到 31200µs。

【讨论】:

  • 这是非常有用的信息,非常感谢您的提示。不幸的是,事实并非如此。此外,当我将绝对曝光设置为较低的值时,相机会很快应用它们,但随后又变回自动设置。这意味着,图像很快就会变亮或变暗,但随后又会返回。我刚刚用我拥有的另一台相机尝试了我的设置,那里一切正常。所以也许只是设备端的一个错误实现?还有机会调试这个吗?
  • @Janos 检查 USB 跟踪可能会有所帮助。也许您可以从两个摄像头中获取痕迹并进行比较。有时,相机固件可能不完全符合规范,正如您所说,可能有问题。
  • @dhanushka 这是否意味着手动曝光永远不会持续存在?只在给定的时间内?我有类似的问题,但我希望保留手动曝光设置
  • @tomdertech 我现在对这个话题有点生疏了,但是,永远,如果你的意思是即使在电源重置之后,你也必须检查相机供应商,看看他们是否提供这样的功能,通过扩展单元将某个配置保存为默认配置。
  • 根据@dhanushka 的解释,你基本上不能将曝光设置为高于一帧的持续时间。
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
  • 1970-01-01
相关资源
最近更新 更多