From 95eb65e6f06abd9f6c3da5c96ce3f49292a0104a Mon Sep 17 00:00:00 2001 From: sun Date: Sat, 13 Jul 2019 10:27:27 +0800 Subject: [PATCH] energy changed --- energy/include/energy/param_struct_define.h | 2 +- energy/src/energy/find/target_finder.cpp | 2 +- energy/src/energy/init/energy_init.cpp | 60 ++++++++++----------- energy/src/energy/run.cpp | 2 +- main.cpp | 9 ++-- 5 files changed, 38 insertions(+), 37 deletions(-) diff --git a/energy/include/energy/param_struct_define.h b/energy/include/energy/param_struct_define.h index 8ebeec2..8b2faf9 100644 --- a/energy/include/energy/param_struct_define.h +++ b/energy/include/energy/param_struct_define.h @@ -79,7 +79,7 @@ struct EnergyPartParam { float FLOW_STRIP_CONTOUR_INTERSETION_AREA_MIN;//流动条占旋转矩形面积比最小值 float TWIN_ANGEL_MAX;//两个理论上相等的角度在计算时具有的可能最大差值 - long INTERSETION_CONTOUR_AREA_MIN;//扇叶与装甲板匹配时的最小重合面积 + long TARGET_INTERSETION_CONTOUR_AREA_MIN;//扇叶与装甲板匹配时的最小重合面积 long TARGET_CHANGE_DISTANCE_MAX;//目标未更改时,目标装甲板中心与原目标装甲板中心的距离变化最大值 long TWIN_POINT_MAX;//两个点相同时距离最大值 diff --git a/energy/src/energy/find/target_finder.cpp b/energy/src/energy/find/target_finder.cpp index eca8630..300cf86 100644 --- a/energy/src/energy/find/target_finder.cpp +++ b/energy/src/energy/find/target_finder.cpp @@ -59,7 +59,7 @@ bool Energy::findTargetInFlowStripFan() { if (rotatedRectangleIntersection(armors.at(i), flow_strip_fan, intersection) == 0) continue;//返回0表示没有重合面积 double cur_contour_area = contourArea(intersection); - if (cur_contour_area < energy_part_param_.INTERSETION_CONTOUR_AREA_MIN) + if (cur_contour_area < energy_part_param_.TARGET_INTERSETION_CONTOUR_AREA_MIN) continue; else { target_armor = armors.at(i); diff --git a/energy/src/energy/init/energy_init.cpp b/energy/src/energy/init/energy_init.cpp index 2d0c040..cf0ab19 100644 --- a/energy/src/energy/init/energy_init.cpp +++ b/energy/src/energy/init/energy_init.cpp @@ -60,17 +60,17 @@ void Energy::initEnergy() { // 此函数对能量机关参数进行初始化 // --------------------------------------------------------------------------------------------------------------------- void Energy::initEnergyPartParam() { - gimble_energy_part_param_.GRAY_THRESH = 225; + gimble_energy_part_param_.GRAY_THRESH = 160; gimble_energy_part_param_.SPLIT_GRAY_THRESH = 180; gimble_energy_part_param_.FAN_GRAY_THRESH = 75; gimble_energy_part_param_.ARMOR_GRAY_THRESH = 80; - gimble_energy_part_param_.FAN_CONTOUR_AREA_MAX = 17000; + gimble_energy_part_param_.FAN_CONTOUR_AREA_MAX = 6600; gimble_energy_part_param_.FAN_CONTOUR_AREA_MIN = 0; - gimble_energy_part_param_.FAN_CONTOUR_LENGTH_MIN = 70; - gimble_energy_part_param_.FAN_CONTOUR_LENGTH_MAX = 100; - gimble_energy_part_param_.FAN_CONTOUR_WIDTH_MIN = 30; - gimble_energy_part_param_.FAN_CONTOUR_WIDTH_MAX = 60; + gimble_energy_part_param_.FAN_CONTOUR_LENGTH_MIN = 56; + gimble_energy_part_param_.FAN_CONTOUR_LENGTH_MAX = 88; + gimble_energy_part_param_.FAN_CONTOUR_WIDTH_MIN = 21; + gimble_energy_part_param_.FAN_CONTOUR_WIDTH_MAX = 40; gimble_energy_part_param_.FAN_CONTOUR_HW_RATIO_MAX = 4; gimble_energy_part_param_.FAN_CONTOUR_HW_RATIO_MIN = 1; gimble_energy_part_param_.FAN_NON_ZERO_RATE_MAX = 0.8; @@ -78,19 +78,19 @@ void Energy::initEnergyPartParam() { gimble_energy_part_param_.ARMOR_CONTOUR_AREA_MAX = 100000; gimble_energy_part_param_.ARMOR_CONTOUR_AREA_MIN = 0; - gimble_energy_part_param_.ARMOR_CONTOUR_LENGTH_MIN = 13; - gimble_energy_part_param_.ARMOR_CONTOUR_WIDTH_MIN = 5; - gimble_energy_part_param_.ARMOR_CONTOUR_LENGTH_MAX = 30; - gimble_energy_part_param_.ARMOR_CONTOUR_WIDTH_MAX = 20; + gimble_energy_part_param_.ARMOR_CONTOUR_LENGTH_MIN = 18; + gimble_energy_part_param_.ARMOR_CONTOUR_LENGTH_MAX = 32; + gimble_energy_part_param_.ARMOR_CONTOUR_WIDTH_MIN = 10; + gimble_energy_part_param_.ARMOR_CONTOUR_WIDTH_MAX = 30; gimble_energy_part_param_.ARMOR_CONTOUR_HW_RATIO_MAX = 3; gimble_energy_part_param_.ARMOR_CONTOUR_HW_RATIO_MIN = 1; gimble_energy_part_param_.CENTER_R_CONTOUR_AREA_MAX = 100000; gimble_energy_part_param_.CENTER_R_CONTOUR_AREA_MIN = 0; - gimble_energy_part_param_.CENTER_R_CONTOUR_LENGTH_MIN = 10; - gimble_energy_part_param_.CENTER_R_CONTOUR_WIDTH_MIN = 10; - gimble_energy_part_param_.CENTER_R_CONTOUR_LENGTH_MAX = 30; - gimble_energy_part_param_.CENTER_R_CONTOUR_WIDTH_MAX = 30; + gimble_energy_part_param_.CENTER_R_CONTOUR_LENGTH_MIN = 7; + gimble_energy_part_param_.CENTER_R_CONTOUR_LENGTH_MAX = 19; + gimble_energy_part_param_.CENTER_R_CONTOUR_WIDTH_MIN = 7; + gimble_energy_part_param_.CENTER_R_CONTOUR_WIDTH_MAX = 19; gimble_energy_part_param_.CENTER_R_CONTOUR_HW_RATIO_MAX = 3; gimble_energy_part_param_.CENTER_R_CONTOUR_HW_RATIO_MIN = 1; gimble_energy_part_param_.CENTER_R_CONTOUR_AREA_RATIO_MIN = 0.7; @@ -98,10 +98,10 @@ void Energy::initEnergyPartParam() { gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_MAX = 17000; gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_MIN = 0; - gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_LENGTH_MIN = 90; - gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_WIDTH_MIN = 35; - gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_LENGTH_MAX = 140; - gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_WIDTH_MAX = 60; + gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_LENGTH_MIN = 56; + gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_LENGTH_MAX = 88; + gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_WIDTH_MIN = 21; + gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_WIDTH_MAX = 40; gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_HW_RATIO_MAX = 3; gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_HW_RATIO_MIN = 1; gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_RATIO_MAX = 0.55; @@ -111,17 +111,17 @@ void Energy::initEnergyPartParam() { gimble_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_MAX = 100000; gimble_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_MIN = 0; - gimble_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MIN = 50; - gimble_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MIN = 3; - gimble_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MAX = 90; - gimble_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MAX = 20; + gimble_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MIN = 31; + gimble_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MAX = 57; + gimble_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MIN = 2; + gimble_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MAX = 13; gimble_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MAX = 12; gimble_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MIN = 4; gimble_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_RATIO_MIN = 0.5; - gimble_energy_part_param_.FLOW_STRIP_CONTOUR_INTERSETION_AREA_MIN = 300; + gimble_energy_part_param_.FLOW_STRIP_CONTOUR_INTERSETION_AREA_MIN = 117; gimble_energy_part_param_.TWIN_ANGEL_MAX = 10; - gimble_energy_part_param_.INTERSETION_CONTOUR_AREA_MIN = 60; + gimble_energy_part_param_.TARGET_INTERSETION_CONTOUR_AREA_MIN = 24; @@ -133,8 +133,8 @@ void Energy::initEnergyPartParam() { chassis_energy_part_param_.FAN_CONTOUR_AREA_MAX = 17000; chassis_energy_part_param_.FAN_CONTOUR_AREA_MIN = 0; chassis_energy_part_param_.FAN_CONTOUR_LENGTH_MIN = 90; - chassis_energy_part_param_.FAN_CONTOUR_WIDTH_MIN = 35; chassis_energy_part_param_.FAN_CONTOUR_LENGTH_MAX = 140; + chassis_energy_part_param_.FAN_CONTOUR_WIDTH_MIN = 35; chassis_energy_part_param_.FAN_CONTOUR_WIDTH_MAX = 65; chassis_energy_part_param_.FAN_CONTOUR_HW_RATIO_MAX = 4; chassis_energy_part_param_.FAN_CONTOUR_HW_RATIO_MIN = 1; @@ -145,8 +145,8 @@ void Energy::initEnergyPartParam() { chassis_energy_part_param_.ARMOR_CONTOUR_AREA_MAX = 100000; chassis_energy_part_param_.ARMOR_CONTOUR_AREA_MIN = 0; chassis_energy_part_param_.ARMOR_CONTOUR_LENGTH_MIN = 30; - chassis_energy_part_param_.ARMOR_CONTOUR_WIDTH_MIN = 15; chassis_energy_part_param_.ARMOR_CONTOUR_LENGTH_MAX = 50; + chassis_energy_part_param_.ARMOR_CONTOUR_WIDTH_MIN = 15; chassis_energy_part_param_.ARMOR_CONTOUR_WIDTH_MAX = 45; chassis_energy_part_param_.ARMOR_CONTOUR_HW_RATIO_MAX = 3; chassis_energy_part_param_.ARMOR_CONTOUR_HW_RATIO_MIN = 1; @@ -155,8 +155,8 @@ void Energy::initEnergyPartParam() { chassis_energy_part_param_.CENTER_R_CONTOUR_AREA_MAX = 100000; chassis_energy_part_param_.CENTER_R_CONTOUR_AREA_MIN = 0; chassis_energy_part_param_.CENTER_R_CONTOUR_LENGTH_MIN = 10; - chassis_energy_part_param_.CENTER_R_CONTOUR_WIDTH_MIN = 10; chassis_energy_part_param_.CENTER_R_CONTOUR_LENGTH_MAX = 30; + chassis_energy_part_param_.CENTER_R_CONTOUR_WIDTH_MIN = 10; chassis_energy_part_param_.CENTER_R_CONTOUR_WIDTH_MAX = 30; chassis_energy_part_param_.CENTER_R_CONTOUR_HW_RATIO_MAX = 3; chassis_energy_part_param_.CENTER_R_CONTOUR_HW_RATIO_MIN = 1; @@ -166,8 +166,8 @@ void Energy::initEnergyPartParam() { chassis_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_MAX = 17000; chassis_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_MIN = 0; chassis_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_LENGTH_MIN = 90; - chassis_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_WIDTH_MIN = 35; chassis_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_LENGTH_MAX = 140; + chassis_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_WIDTH_MIN = 35; chassis_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_WIDTH_MAX = 60; chassis_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_HW_RATIO_MAX = 3; chassis_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_HW_RATIO_MIN = 1; @@ -179,8 +179,8 @@ void Energy::initEnergyPartParam() { chassis_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_MAX = 100000; chassis_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_MIN = 0; chassis_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MIN = 50; - chassis_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MIN = 3; chassis_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MAX = 90; + chassis_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MIN = 3; chassis_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MAX = 20; chassis_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MAX = 12; chassis_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MIN = 4; @@ -188,7 +188,7 @@ void Energy::initEnergyPartParam() { chassis_energy_part_param_.FLOW_STRIP_CONTOUR_INTERSETION_AREA_MIN = 300; chassis_energy_part_param_.TWIN_ANGEL_MAX = 10; - chassis_energy_part_param_.INTERSETION_CONTOUR_AREA_MIN = 60; + chassis_energy_part_param_.TARGET_INTERSETION_CONTOUR_AREA_MIN = 60; chassis_energy_part_param_.TARGET_CHANGE_DISTANCE_MAX = 20; chassis_energy_part_param_.TWIN_POINT_MAX = 20; diff --git a/energy/src/energy/run.cpp b/energy/src/energy/run.cpp index b984efe..38bdd1b 100644 --- a/energy/src/energy/run.cpp +++ b/energy/src/energy/run.cpp @@ -16,7 +16,7 @@ void Energy::run(cv::Mat &gimble_src, cv::Mat &chassis_src) { if (chassis_src.empty()) run(gimble_src);//仅拥有云台摄像头则调用单摄像头的run函数 else if (isGimble) { - energy_part_param_ = chassis_energy_part_param_; + energy_part_param_ = gimble_energy_part_param_; clearAll(); initImage(gimble_src); diff --git a/main.cpp b/main.cpp index d2efb3a..e3c081e 100644 --- a/main.cpp +++ b/main.cpp @@ -29,7 +29,7 @@ using namespace std; mcu_data mcuData = { // 单片机端回传结构体 0, // 当前云台yaw角 0, // 当前云台pitch角 - ARMOR_STATE, // 当前状态,自瞄-大符-小符 + BIG_ENERGY_STATE, // 当前状态,自瞄-大符-小符 0, // 云台角度标记位 1, // 是否启用数字识别 ENEMY_RED, // 敌方颜色 @@ -63,8 +63,8 @@ int main(int argc, char *argv[]) { video_gimble = new CameraWrapper(0/*, "armor"*/); video_chassis = new CameraWrapper(1/*, "energy"*/); } else { - video_gimble = new VideoWrapper("/home/sun/项目/RM2019 能量机关视频/小能量机关(红+开灯).mov"); - video_chassis = new VideoWrapper("/home/sun/项目/RM2019 能量机关视频/小能量机关(红+开灯).mov"); + video_gimble = new VideoWrapper("/home/sun/项目/energy_video/energy_test.avi"); + video_chassis = new VideoWrapper("/home/sun/项目/energy_video/energy_test.avi"); } if (video_gimble->init()) { LOGM("video_gimble source initialization successfully."); @@ -101,7 +101,8 @@ int main(int argc, char *argv[]) { if (!from_camera) extract(gimble_src, chassis_src); if (save_video) saveVideos(gimble_src, chassis_src);//保存视频 if (show_origin) showOrigin(gimble_src, chassis_src);//显示原始图像 - energy.run(gimble_src, chassis_src); +// energy.run(gimble_src, chassis_src); + energy.run(gimble_src); last_state = mcuData.state;//更新上一帧状态 } else { // 自瞄模式 if (last_state != ARMOR_STATE) {