Jan*_*nos 9 webcam camera opencv v4l2
我试图手动控制相机的曝光,但该设置只是短暂激活,但显然自动模式似乎仍然处于激活状态,正如我在相机图像上看到的那样。
我的相机有以下控件:
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
Run Code Online (Sandbox Code Playgroud)
我设置并验证,同时通过基本查看器观看图像opencv,该查看器不执行任何控制:
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
Run Code Online (Sandbox Code Playgroud)
我也玩这个exposure_auto_priority设置。
然而,当我改变曝光时,我可以很快在相机的图像上看到效果,然后似乎立即回到“自动”模式。即相机正在自动调整亮度。
当我使用 时,我观察到了相同的效果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
Run Code Online (Sandbox Code Playgroud)
$ media-ctl -p
Failed to enumerate /dev/media0 (-13)
$ ls /dev/media*
/dev/media0 /dev/media1 /dev/media2
Run Code Online (Sandbox Code Playgroud)
$ 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
Run Code Online (Sandbox Code Playgroud)
查看 UVC 类规范中的曝光时间(绝对)控制,您可以从 usb.org 找到该规范。我引用下面的规范版本 1.5。
\n\n\n\n\n请注意,手动曝光控制进一步受到帧间隔的限制,帧间隔始终具有更高的优先级。如果将帧间隔更改为低于曝光控制当前值的值,则曝光控制值将自动更改。默认曝光控制值将是当前帧间隔,直到选择显式曝光值为止。
\n
所以,这解释了你所看到的。绝对曝光时间以 100\xc2\xb5s 为单位表示。您的默认值为 312,即 31200\xc2\xb5s,这给出的帧速率约为 32。
\n\nexposure_absolute 0x009a0902 (int) : min=78 max=1250 step=1 default=312 value=312 flags=inactive\n\nFrames per second: 30.000 (30/1)\nRun Code Online (Sandbox Code Playgroud)\n\n您将绝对曝光时间设置为 1000,即 100000\xc2\xb5s。这会生效,但随后帧间隔 (31200\xc2\xb5s) 优先并回落到 31200\xc2\xb5s。
\n