与 Windows 10 相比,v4l2 手动曝光不起作用
v4l2 manual exposure not working compared to Windows 10
这个问题和V4L2 absolute exposure setting has (almost) not effect
非常相似
我有一个 UVC
兼容的相机,我 运行 在 Raspberry Pi CM3+
模块上。它显示为 video0
。
使用tools/driversv4l2-ctl
、qv4l2
或guvcview
无法控制absolute exposure
,但使用[=20=时可以控制] 在 Windows 10.
相机有两种曝光模式manual
和aperature controlled
。当处于 aperature controlled
时,图像中的曝光水平会动态变化,但是,当切换到 manual
模式时,图像会变得非常暗,并且无论是在可选择范围的上限还是下限都不会改变.
当 运行 v4l2-ctl
范围 min
被声明为 5
而 max
为 2500
。然而,在 windows 中,它介于 -2
和 -11
之间,并且图像的曝光会按比例变化,正如您所期望的那样。
参数范围从v4l2
:
exposure_auto 0x009a0901 (menu) : min=0 max=3 default=3 value=1
exposure_absolute 0x009a0902 (int) : min=5 max=2500 step=1 default=156 value=1659
参数范围从 Amcap
到 Windows 10:
如果我这样做 v4l2-ctl -d0 -all
这就是我得到的:
pi@raspberrypi:~ $ v4l2-ctl -d0 --all
Driver Info:
Driver name : uvcvideo
Card type : HD USB CAMERA: HD USB CAMERA
Bus info : usb-0000:01:00.0-1.3
Driver version : 5.4.79
Capabilities : 0x84a00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Media Driver Info:
Driver name : uvcvideo
Model : HD USB CAMERA: HD USB CAMERA
Serial : 01.00.00
Bus info : usb-0000:01:00.0-1.3
Media version : 5.4.79
Hardware revision: 0x00000224 (548)
Driver version : 5.4.79
Interface Info:
ID : 0x03000002
Type : V4L Video
Entity Info:
ID : 0x00000001 (1)
Name : HD USB CAMERA: HD USB CAMERA
Function : V4L2 I/O
Flags : default
Pad 0x01000007 : 0: Sink
Link 0x02000013: from remote pad 0x100000a of entity 'Extension 4': Data, Enabled, Immutable
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
Width/Height : 640/480
Pixel Format : 'YUYV' (YUYV 4:2:2)
Field : None
Bytes per Line : 1280
Size Image : 614400
Colorspace : sRGB
Transfer Function : Default (maps to sRGB)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Limited Range)
Flags :
Crop Capability Video Capture:
Bounds : Left 0, Top 0, Width 640, Height 480
Default : Left 0, Top 0, Width 640, Height 480
Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 640, Height 480, Flags:
Selection: crop_bounds, Left 0, Top 0, Width 640, Height 480, Flags:
Streaming Parameters Video Capture:
Capabilities : timeperframe
Frames per second: 30.000 (30/1)
Read buffers : 0
brightness 0x00980900 (int) : min=-64 max=64 step=1 default=0 value=-6
contrast 0x00980901 (int) : min=0 max=95 step=1 default=1 value=6
saturation 0x00980902 (int) : min=0 max=100 step=1 default=52 value=22
hue 0x00980903 (int) : min=-2000 max=2000 step=1 default=0 value=0
white_balance_temperature_auto 0x0098090c (bool) : default=1 value=0
gamma 0x00980910 (int) : min=100 max=300 step=1 default=115 value=115
power_line_frequency 0x00980918 (menu) : min=0 max=2 default=1 value=1
white_balance_temperature 0x0098091a (int) : min=2800 max=6500 step=1 default=4600 value=4600
sharpness 0x0098091b (int) : min=0 max=7 step=1 default=0 value=0
backlight_compensation 0x0098091c (int) : min=36 max=160 step=1 default=54 value=36
exposure_auto 0x009a0901 (menu) : min=0 max=3 default=3 value=1
exposure_absolute 0x009a0902 (int) : min=5 max=2500 step=1 default=156 value=1659
error 22 getting ext_ctrl Pan (Absolute)
error 22 getting ext_ctrl Tilt (Absolute)
focus_absolute 0x009a090a (int) : min=0 max=1023 step=1 default=0 value=355
focus_auto 0x009a090c (bool) : default=1 value=0
error 22 getting ext_ctrl Zoom, Absolute
我试过在 MJPEG
和 YUYV
之间更改格式,但没有任何更改。
我假设这是驱动程序问题或我忽略的某些设置?
Amcap (Windows) 在我的案例中有 5 个离散的曝光级别 [-6,-5,-4,-3,-2]
。
Linux(guvcview
和 v4l2
)具有从 [5 to 2500]
开始的连续范围(从使用 v4l2-ctl
的 OP 中可以看出)。
我在 Amcap 中手动设置了曝光级别,然后使用 Linux (guvcview
) 读取它们:
[-6 = 156; -5 = 312; -4 = 625; -3 = 1250; -2 = 2500]
当我将 exposure
设置为这些级别中的任何一个时,它会按预期工作。 然而 如果我设置任何其他值,例如 2499 或 157,只要少一位,我就会几乎完全变黑!
我确信有一些数学原因可以证明这一点,但是,我发现这是一种误导,因为 Linux 驱动程序报告了一个连续的范围,这表明曝光范围是线性的,但事实并非如此并且是离散的!
这个问题和V4L2 absolute exposure setting has (almost) not effect
非常相似我有一个 UVC
兼容的相机,我 运行 在 Raspberry Pi CM3+
模块上。它显示为 video0
。
使用tools/driversv4l2-ctl
、qv4l2
或guvcview
无法控制absolute exposure
,但使用[=20=时可以控制] 在 Windows 10.
相机有两种曝光模式manual
和aperature controlled
。当处于 aperature controlled
时,图像中的曝光水平会动态变化,但是,当切换到 manual
模式时,图像会变得非常暗,并且无论是在可选择范围的上限还是下限都不会改变.
当 运行 v4l2-ctl
范围 min
被声明为 5
而 max
为 2500
。然而,在 windows 中,它介于 -2
和 -11
之间,并且图像的曝光会按比例变化,正如您所期望的那样。
参数范围从v4l2
:
exposure_auto 0x009a0901 (menu) : min=0 max=3 default=3 value=1
exposure_absolute 0x009a0902 (int) : min=5 max=2500 step=1 default=156 value=1659
参数范围从 Amcap
到 Windows 10:
如果我这样做 v4l2-ctl -d0 -all
这就是我得到的:
pi@raspberrypi:~ $ v4l2-ctl -d0 --all
Driver Info:
Driver name : uvcvideo
Card type : HD USB CAMERA: HD USB CAMERA
Bus info : usb-0000:01:00.0-1.3
Driver version : 5.4.79
Capabilities : 0x84a00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Media Driver Info:
Driver name : uvcvideo
Model : HD USB CAMERA: HD USB CAMERA
Serial : 01.00.00
Bus info : usb-0000:01:00.0-1.3
Media version : 5.4.79
Hardware revision: 0x00000224 (548)
Driver version : 5.4.79
Interface Info:
ID : 0x03000002
Type : V4L Video
Entity Info:
ID : 0x00000001 (1)
Name : HD USB CAMERA: HD USB CAMERA
Function : V4L2 I/O
Flags : default
Pad 0x01000007 : 0: Sink
Link 0x02000013: from remote pad 0x100000a of entity 'Extension 4': Data, Enabled, Immutable
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
Width/Height : 640/480
Pixel Format : 'YUYV' (YUYV 4:2:2)
Field : None
Bytes per Line : 1280
Size Image : 614400
Colorspace : sRGB
Transfer Function : Default (maps to sRGB)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Limited Range)
Flags :
Crop Capability Video Capture:
Bounds : Left 0, Top 0, Width 640, Height 480
Default : Left 0, Top 0, Width 640, Height 480
Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 640, Height 480, Flags:
Selection: crop_bounds, Left 0, Top 0, Width 640, Height 480, Flags:
Streaming Parameters Video Capture:
Capabilities : timeperframe
Frames per second: 30.000 (30/1)
Read buffers : 0
brightness 0x00980900 (int) : min=-64 max=64 step=1 default=0 value=-6
contrast 0x00980901 (int) : min=0 max=95 step=1 default=1 value=6
saturation 0x00980902 (int) : min=0 max=100 step=1 default=52 value=22
hue 0x00980903 (int) : min=-2000 max=2000 step=1 default=0 value=0
white_balance_temperature_auto 0x0098090c (bool) : default=1 value=0
gamma 0x00980910 (int) : min=100 max=300 step=1 default=115 value=115
power_line_frequency 0x00980918 (menu) : min=0 max=2 default=1 value=1
white_balance_temperature 0x0098091a (int) : min=2800 max=6500 step=1 default=4600 value=4600
sharpness 0x0098091b (int) : min=0 max=7 step=1 default=0 value=0
backlight_compensation 0x0098091c (int) : min=36 max=160 step=1 default=54 value=36
exposure_auto 0x009a0901 (menu) : min=0 max=3 default=3 value=1
exposure_absolute 0x009a0902 (int) : min=5 max=2500 step=1 default=156 value=1659
error 22 getting ext_ctrl Pan (Absolute)
error 22 getting ext_ctrl Tilt (Absolute)
focus_absolute 0x009a090a (int) : min=0 max=1023 step=1 default=0 value=355
focus_auto 0x009a090c (bool) : default=1 value=0
error 22 getting ext_ctrl Zoom, Absolute
我试过在 MJPEG
和 YUYV
之间更改格式,但没有任何更改。
我假设这是驱动程序问题或我忽略的某些设置?
Amcap (Windows) 在我的案例中有 5 个离散的曝光级别 [-6,-5,-4,-3,-2]
。
Linux(guvcview
和 v4l2
)具有从 [5 to 2500]
开始的连续范围(从使用 v4l2-ctl
的 OP 中可以看出)。
我在 Amcap 中手动设置了曝光级别,然后使用 Linux (guvcview
) 读取它们:
[-6 = 156; -5 = 312; -4 = 625; -3 = 1250; -2 = 2500]
当我将 exposure
设置为这些级别中的任何一个时,它会按预期工作。 然而 如果我设置任何其他值,例如 2499 或 157,只要少一位,我就会几乎完全变黑!
我确信有一些数学原因可以证明这一点,但是,我发现这是一种误导,因为 Linux 驱动程序报告了一个连续的范围,这表明曝光范围是线性的,但事实并非如此并且是离散的!