灯条识别
在已知灯条颜色的情况下分离出灯条的过程十分简单,本处不再赘述。灯条识别主要存在的不确定点便是排除干扰。可以从以下几个角度入手。
- 灯条的长宽比。
- 装甲板在赛场上的固定几种摆放姿态使得其倾斜角度在一定范围内。
基于以上两点,便可以排除形状和姿态不符合灯条条件的干扰。
装甲板识别
装甲板识别基于灯条识别后返回的有效结果。因为画面中可能存在多个灯条,这里的不确定性主要在于有效装甲板的筛选。
- 由两个灯条组成。
- 两灯条都有一个角度。并且因为两灯条在装甲板上平行,且与摄像机俯仰角在一定范围内,两灯条角度与高度差应该在一定范围内。
- 因为装甲板水平放置,考虑摄像机位置原因,其斜率在一定范围内。
- 在实际处理中,太偏僻的装甲板应当酌情予以舍去,因为它不适合作为打击目标。
杂项
性能
为确保足够高的帧率,需要在处理过程中尽可能减少运算量。
- 使用 ROI 降低每帧要处理的图像尺寸。
- 在循环外定义变量,避免频繁的大量对象创建和销毁。
RotatedRect 中返回的角度与宽高的问题
RotatedRect 返回角度的规则为:取距离原点(画面左上角)最近的一条边做延长线,延长线与 x 轴的交点即为返回的角度值(单位 度)。
并且,在 Open CV 中,定义 RotatedRect 距离原点最近的一条边为宽。
fitEllipse
拟合 RotatedRect 还有一个选择:fitEllipse。这个函数会尝试拟合一个椭圆,因此返回的角度值会没有那么迷惑(0°~180°)。