修改亮度、对比度、色调、饱和度,达到预期效果

用户态可以通过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,这样就可以显示黑白图,也能看清楚一些情况。

当逆光时,也可以调整亮度

你可能感兴趣的:(C++,机器视觉算法,Linux,linux,C++)