Opencv3排除横向灯条应用

HSV 色彩空间提取灯条

思路来源以及设想

无论是 HSV 还是 RGB 分割法都对二值化阈值的选取有很强的依赖性,但是 HSV 色彩空间排除环境光的能力远强于RGB。因此我们尝试了HSV 方法。(HSV 效果如图 1 下,可以很好的提取灯条部分)
在这里插入图片描述
对应我们想要选取的色彩区域,从下图三棱锥中,通过 H SV的阈值选择,提取出我们需要色彩区域。
请添加图片描述

实现过程

RGB 转换成HSV

​ 与 RGB 不同,HSV 分别指的是色调(H),饱和度(S),明度(V),特点是符合人的感觉,非常直观,容易理解。比如,某些由于光照不同造成的视觉感知不同的场景下,我们通常用 V 这个通道进行计算,通过计算梯度,可以较好的提取物体边缘。再比如某些场景下,前景饱和度较高,背景采用饱和度较低的颜色来衬托前景,这时 S 这个通道的信息就非常有用了。再比如,在某些室内场景下,风格较为单一,一般一个物体只有一种颜色,这时候 H 这个通道就显得尤为重要了。由于比赛中,场地中,机器人的灯条亮度(V)较高且灯条颜色(H / V)固定,为蓝色,红色,因此通过提取蓝色或红色区域, 以及后续的优化,就可以很好的避免环境光的影响,而减少噪声影响。

选择HSV 三个分量的阈值,进行灯条区域的筛选。最初,我们的色彩选择范围是从下图选择的:
在这里插入图片描述
但发现下列阈值,并不能很好的适应灯条中心蓝光过曝变白,红光过曝变黄变白的问题,最后我们通过,放宽阈值选择范围,能多但绝对不少的原则进行了阈值的选择。

优化阈值范围

在进行颜色特征提取时,通常采用的方法包括:颜色直方图、颜色矩、颜色集、颜色相关图、颜色聚合向量。我们采用最便捷的颜色直方图,获取灯条区域的颜色峰值,颜色分布。计算平均值,记录最大值,最小值,通过公式计算,结合处理效果输出,确定最优阈值范围。

在充分提取灯条之后,我们发现过滤上方血条能力较差,因此我们采取了掩膜策略。
在这里插入图片描述

过滤横向灯条的方法

用旋转矩形框选灯条

探究RotatedRect 类中的成员变量:
在这里插入图片描述
① p[0]~p[3]按顺时针方向依次排列。
② p[0]到p[3]之间的距离为宽width,其邻边为高height。

③ 角度angle,是以 p[0]顶点,平行于X 轴,且与X 轴方向相同的射线为始边,按逆时针方向旋转到宽边 p[0]p[3]所经过的角度, 取负值,取值范围为(-90, 0]。

Opencv4的RotatedRect 类angle定义为p[0]与p[1]形成的线与水平线的夹角,width为p[0] p[1],与opencv3不太一样。
根据长宽和角度选择灯条:

若为横向灯条,最显著的特点就是靠近底边线的小角度趋近于零, 因此,问题转变为求底边所需要的最小angle 的问题。

若width>height ,则记 abs(angle)即为所需角度,若width<height,如图 7(3)所示,则记 angle+90°为所需角度。最后设置角度变化范围筛选最小角度,最终得到我们的最优效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值