From f60c3ecc620f5fa6693f4c61e80ceea88e3c1900 Mon Sep 17 00:00:00 2001 From: wanpiqiu123 <779893878@qq.com> Date: Thu, 18 Jul 2019 10:45:04 +0800 Subject: [PATCH] Change the parameters for judgements --- energy/src/energy/clear/energy_init.cpp | 12 ++++---- energy/src/energy/find/energy_finder.cpp | 5 ++-- energy/src/energy/judge/judge_contour.cpp | 34 +++++++++++++++-------- main.cpp | 14 +++++----- 4 files changed, 39 insertions(+), 26 deletions(-) diff --git a/energy/src/energy/clear/energy_init.cpp b/energy/src/energy/clear/energy_init.cpp index 728014b..1a82280 100644 --- a/energy/src/energy/clear/energy_init.cpp +++ b/energy/src/energy/clear/energy_init.cpp @@ -115,10 +115,10 @@ void Energy::initEnergyPartParam() { gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_LENGTH_MIN = 60; gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_LENGTH_MAX = 100; gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_WIDTH_MIN = 20; - gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_WIDTH_MAX = 50; + gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_WIDTH_MAX = 52; gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_HW_RATIO_MAX = 3; gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_HW_RATIO_MIN = 1; - gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_RATIO_MAX = 0.58; + gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_RATIO_MAX = 0.62; gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_RATIO_MIN = 0.34; gimbal_energy_part_param_.FLOW_STRIP_FAN_NON_ZERO_RATE_MAX = 0.58; gimbal_energy_part_param_.FLOW_STRIP_FAN_NON_ZERO_RATE_MIN = 0.34; @@ -127,13 +127,13 @@ void Energy::initEnergyPartParam() { gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_MAX = 100000; gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_MIN = 0; - gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MIN = 40; - gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MAX = 65; + gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MIN = 38; + gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MAX = 60; gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MIN = 8; - gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MAX = 20; + gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MAX = 28; gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MAX = 12; // gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MIN = 4; - gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MIN = 3; + gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MIN = 2.3; gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_RATIO_MIN = 0.5; gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_INTERSETION_AREA_MIN = 117; diff --git a/energy/src/energy/find/energy_finder.cpp b/energy/src/energy/find/energy_finder.cpp index faa542d..8913728 100644 --- a/energy/src/energy/find/energy_finder.cpp +++ b/energy/src/energy/find/energy_finder.cpp @@ -173,7 +173,6 @@ bool Energy:: findFlowStripFan(const cv::Mat src) { // imshow("flow strip fan struct", src_bin); findContours(src_bin, flow_strip_fan_contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE); - for (auto &flow_strip_fan_contour : flow_strip_fan_contours) { if (!isValidFlowStripFanContour(src_bin, flow_strip_fan_contour)) { continue; @@ -198,6 +197,7 @@ bool Energy:: findFlowStripFan(const cv::Mat src) { } // showFlowStripFan("strip fan", src_bin); cout << "flow strip fan false!" << endl; +// waitKey(); return false; } @@ -222,6 +222,7 @@ bool Energy::findFlowStrip(const cv::Mat src) { if (!isValidFlowStripContour(flow_strip_contour)) { continue; } +// cout<<"size: "< &f double cur_contour_area = contourArea(flow_strip_fan_contour); if (cur_contour_area > energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_MAX || cur_contour_area < energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_MIN) { - //cout< cur_size.width ? cur_size.height : cur_size.width;//将矩形的长边设置为长 @@ -151,21 +152,24 @@ bool Energy::isValidFlowStripFanContour(cv::Mat &src, const vector &f || width < energy_part_param_.FLOW_STRIP_FAN_CONTOUR_WIDTH_MIN || length > energy_part_param_.FLOW_STRIP_FAN_CONTOUR_LENGTH_MAX || width > energy_part_param_.FLOW_STRIP_FAN_CONTOUR_WIDTH_MAX) { - //cout<<"length width fail."<1600) +// cout<<"length: "< energy_part_param_.FLOW_STRIP_FAN_CONTOUR_HW_RATIO_MAX || length_width_ratio < energy_part_param_.FLOW_STRIP_FAN_CONTOUR_HW_RATIO_MIN) { - //cout<<"length width ratio fail."< energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_RATIO_MAX) { + if(cur_contour_area>1600) + cout<<"size ratio: "< &flow_strip_contour if (cur_contour_area > energy_part_param_.FLOW_STRIP_CONTOUR_AREA_MAX || cur_contour_area < energy_part_param_.FLOW_STRIP_CONTOUR_AREA_MIN) { // cout<<"area fail."< intersection; + if (rotatedRectangleIntersection(cur_rect, flow_strip_fan, intersection) == 0 || + contourArea(intersection) < energy_part_param_.FLOW_STRIP_CONTOUR_INTERSETION_AREA_MIN) { +// cout<<"Intersection false!"< cur_size.width ? cur_size.height : cur_size.width;//将矩形的长边设置为长 float width = cur_size.height < cur_size.width ? cur_size.height : cur_size.width;//将矩形的短边设置为宽 @@ -201,6 +213,8 @@ bool Energy::isValidFlowStripContour(const vector &flow_strip_contour width < energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MIN || length > energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MAX || width > energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MAX) { +// if(cur_contour_area>600&&cur_contour_area<900) +// cout<<"length: "< &flow_strip_contour float length_width_ratio = length / width;//计算矩形长宽比 if (length_width_ratio > energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MAX || length_width_ratio < energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MIN) { +// if(cur_contour_area>600&&cur_contour_area<900) +// cout<<"length: "< intersection; - if (rotatedRectangleIntersection(cur_rect, flow_strip_fan, intersection) == 0 || - contourArea(intersection) < energy_part_param_.FLOW_STRIP_CONTOUR_INTERSETION_AREA_MIN) { - return false; - } + return true; } diff --git a/main.cpp b/main.cpp index a83077c..a0e2758 100644 --- a/main.cpp +++ b/main.cpp @@ -64,10 +64,10 @@ int main(int argc, char *argv[]) { video_gimbal = new CameraWrapper(0/*, "armor"*/); video_chassis = new CameraWrapper(1/*, "energy"*/); } else { -// video_gimbal = new VideoWrapper("/home/sjturm/Desktop/videos/147.avi"); -// video_chassis = new VideoWrapper("/home/sjturm/Desktop/videos/147.avi"); - video_gimbal = new VideoWrapper("/home/sjturm/Desktop/dafu/gimble3.avi"); - video_chassis = new VideoWrapper("/home/sjturm/Desktop/dafu/chassis3.avi"); + video_gimbal = new VideoWrapper("/home/sjturm/Desktop/videos/gimbal84.avi"); + video_chassis = new VideoWrapper("/home/sjturm/Desktop/videos/gimbal84.avi"); +// video_gimbal = new VideoWrapper("/home/sjturm/Desktop/dafu/gimble3.avi"); +// video_chassis = new VideoWrapper("/home/sjturm/Desktop/dafu/chassis3.avi"); } if (video_gimbal->init()) { LOGM("video_gimbal source initialization successfully."); @@ -113,8 +113,8 @@ int main(int argc, char *argv[]) { if (!from_camera) extract(gimbal_src, chassis_src); if (save_video) saveVideos(gimbal_src, chassis_src);//保存视频 if (show_origin) showOrigin(gimbal_src, chassis_src);//显示原始图像 - energy.run(gimbal_src, chassis_src); -// energy.run(gimbal_src); +// energy.run(gimbal_src, chassis_src); + energy.run(gimbal_src); last_state = mcuData.state;//更新上一帧状态 } else { // 自瞄模式 if (last_state != ARMOR_STATE) { @@ -133,7 +133,7 @@ int main(int argc, char *argv[]) { armorFinder.run(gimbal_src); }); } - cv::waitKey(1); + cv::waitKey(20); }); } while (ok); delete video_gimbal;