用户态可以通过v4l2自带工具进行一些UVC相机参数的设定,包括采集卡驱动之类,也可以通过v4l2自带工具进行参数设定。
通过修改这些参数的值,可以弥补相机本身彩色部分自带不足。
总的来说就这么几种命令:
查看设备所有参数信息:
v4l2-ctl -d /dev/videoX --list-ctrls
ps:X表示相机挂载的UVC节点号,如0,9之类
一般会显示以下四种参数
最小 最大 步进 默认 当前
brightness 0x00980900 (int) : min=0 max=100 step=1 default=50 value=66 #亮度
contrast 0x00980901 (int) : min=0 max=100 step=1 default=50 value=50 #对比度
saturation 0x00980902 (int) : min=0 max=100 step=1 default=50 value=50 #饱和度
hue 0x00980903 (int) : min=0 max=100 step=1 default=50 value=50 #色调
注意:不同驱动、采集卡反馈信息是不一样的,范围也不一样。有些0~100,有些0~255,也有些-128-127 不一样,因此需要先查看下值
查看某个属性值
v4l2-ctl -d /dev/videoX --get-ctrl=brightness
就会返回该参数对应的值
设置摸个属性值
v4l2-ctl -d /dev/videoX --set-ctrl=brightness=30
注意设置值的范围是否超过该参数的范围
这些参数都是可以设置的,
当然前提在拉流之前设置,如果已经开始拉流了,会导致视频流卡住的。
那么,我们应该如何设置这些参数呢?这些参数有什么关系吗?
先从简单来说,亮度与对比度,这个一般都知道。
如果是在光线不足的情况下,可以提高亮度的值,这样图像就会更加明亮一点(感觉更清晰点)
也可以提高对比度的值,但效果不是一样
当然这个跟实际场景有一定关系,也不能完全一概而论,对于大部分建议60%对比度、40%亮度,这样比较真实点,当然跟相机sensor本身也有很大关系
说明:对比图片是采用两种不同亮度值(满值100),30的明显暗很多
再来一组对比度的对比图
对比度高的明显“亮”很多
细心点对比下,对比度70与亮度70,其实也有差别的
同样70,亮度70的要发白一些
从实际肉眼角度来看,对比度70的要比亮度70 更真实一点。
另外一组参数,色调与饱和度,色调相当于亮度、饱和度相当于对比度
色调如果过低,那么绿色会变蓝色,色调过高,那么蓝色变成绿色
一般先调色调,把颜色调成一致,然后再调饱和度,
颜色要对比强烈点(更靓丽点),饱和度高一点(过高的话,会偏白色,感觉像是灰蒙蒙一层)
也是同样硬件,采用30 - 70对比
饱和度对比,30比70的颜色要“暗淡”一些,70的要鲜艳一些
也不是说鲜艳就好,要根据实际情况来适配的,鲜艳的颜色感觉有点失真(假)
关键还是看sensor以及isp处理是否足够优秀,一般来说,最好的(最真实)应该是中间值(50)
色调对比,就更夸张了,颜色都变掉了。不说了,除非sensor 真有问题,否则仅用于微调该参数,不然总有一种颜色是不正常的!!
饱和度70还能基本保持颜色一致,但色调就没办法保证了
通过以上对比,相信有个基本概念,这里也是比较简单粗暴的对比;
当然,要适应全环境还是很难的,算法也很讲究的,需要投入很多精力
实际项目的话,有些特殊环境,比如黑夜无光的时候,把色调调0,这样就可以显示黑白图,也能看清楚一些情况。
当逆光时,也可以调整亮度