rm记录第二阶段(二):Armor分析(一)

本文详细解析Armor系统,重点介绍Armor.h中定义的参数和类,包括装甲板和灯条的属性与方法,以及装甲板数字分类器的工作原理。内容涉及枚举、结构体、类的定义,并探讨了相关函数的功能,如角度平均值计算、装甲板中心坐标获取等。
摘要由CSDN通过智能技术生成

参考:https://github.com/QunShanHe/JLURoboVision#%E8%BF%90%E8%A1%8C%E5%B9%B3%E5%8F%B0%E6%90%AD%E5%BB%BA

先主要说下装甲板的一些东西,要不看后面的看不懂,这个看完在去看(一)。

然后先看一下这个Arrmor.h文件,这个文件里定义了各种参数和类,然后我们一步步看:

enum DetectorState
{
	LIGHTS_NOT_FOUND = 0,
	LIGHTS_FOUND = 1,
	ARMOR_NOT_FOUND = 2,
	ARMOR_FOUND = 3
};

这个是枚举:枚举是一种基本数据类型,它可以让数据更简洁,更易读。里面的数据类型都是我们自己定义的 DetectorState

struct ArmorParam{

	int color_threshold;   //color threshold for colorImg from substract channels 通道相减的colorImg使用的二值化阈值
	int bright_threshold;  //color threshold for brightImg 亮度图二值化阈值

	float min_area;		// min area of light bar 灯条允许的最小面积
	float max_angle;	//max angle of light bar 灯条允许的最大偏角

	float max_angle_diff; //max angle difference between two light bars 两个灯条之间允许的最大角度差
	float max_lengthDiff_ratio; //max length ratio difference between two light bars 两个灯条之间允许的最大长度差比值
	float max_deviation_angle; //max deviation angle 两灯条最大错位角

	float max_y_diff_ratio;  //max y 
	float max_x_diff_ratio;  //max x


	//default values  给各参数设定默认值
	ArmorParam(){
	color_threshold = 100-20;
	bright_threshold = 60;

	min_area = 50;
	max_angle = 45;

	max_angle_diff = 6;
	max_lengthDiff_ratio = 0.5;
	max_deviation_angle = 50;

	max_y_diff_ratio = 0.5;
	max_x_diff_ratio = 4.5;
	}
};
extern ArmorParam armorParam;

然后定义一个结构体来定义各种参数,最后用extern生成对象,但不分配内存空间,然后参数也给了默认值,这个上面写的很清楚了。

class LightBar
{
public:

	LightBar();
/**
 *@brief: Parametrical constructor of lightBar 灯条有参构造函数
 *@param: RotatedRect created by fitellipse  拟合椭圆获得的旋转矩形来构造灯条
 */
	LightBar(const RotatedRect& light);
	~LightBar();

public:
	RotatedRect lightRect; //rotation rect of light 灯条的旋转矩形(椭圆拟合获得)
	float length;  //length of light bar 灯条长度
	Point2f center; //center of light bar 灯条中心
	float angle;  //angle of light bar(between length direction and vertical, left 0~90 right 0~-90) 灯条长度方向与竖直方向的夹角,左偏为0~90,右偏为0~-90
};

然后定义了一个灯条的类:然后这里面有他的属性,放倒了私有里面,然后有2个方法就是那两个函数(名一样但是参数不一样),我们看看这个函数:它写在lightbar.cpp里,函数不算难,不说了

LightBar::LightBar(){
	lightRect = RotatedRect();
	length = 0;
	center = Point2f();
	angle = 0;
}

LightBar::LightBar(const RotatedRect &lightRect){
	this->lightRect = lightRect;
	length = MAX(lightRect.size.height, lightRect.size.width);
	center = lightRect.center;
	if (lightRect.angle > 90)
		angle = lightRect.angle - 180;
	else
		angle = lightRect.angle;
}

LightBar::~LightBar
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值