diff --git a/energy/src/energy/calibrate/structing.cpp b/energy/src/energy/calibrate/structing.cpp index 8325b58..721a282 100644 --- a/energy/src/energy/calibrate/structing.cpp +++ b/energy/src/energy/calibrate/structing.cpp @@ -57,6 +57,7 @@ void Energy::ArmorStruct(cv::Mat &src) { // imshow("erode_2", src); erode(src,src, element_erode_3); // imshow("erode_3", src); + // dilate(src, src, element_dilate_2); // imshow("dilate_2", src); // dilate(src, src, element_dilate_3); diff --git a/energy/src/energy/clear/energy_init.cpp b/energy/src/energy/clear/energy_init.cpp index 94e3b86..93af8cf 100644 --- a/energy/src/energy/clear/energy_init.cpp +++ b/energy/src/energy/clear/energy_init.cpp @@ -69,7 +69,8 @@ void Energy::initEnergy() { // 此函数对能量机关参数进行初始化 // --------------------------------------------------------------------------------------------------------------------- void Energy::initEnergyPartParam() { - gimbal_energy_part_param_.GRAY_THRESH = 120; +// gimbal_energy_part_param_.GRAY_THRESH = 120;//home + gimbal_energy_part_param_.GRAY_THRESH = 200;//official // gimbal_energy_part_param_.GRAY_THRESH = 225; gimbal_energy_part_param_.SPLIT_GRAY_THRESH = 230; gimbal_energy_part_param_.FAN_GRAY_THRESH = 75; @@ -141,7 +142,8 @@ void Energy::initEnergyPartParam() { - chassis_energy_part_param_.GRAY_THRESH = 120; +// chassis_energy_part_param_.GRAY_THRESH = 120;//home + chassis_energy_part_param_.GRAY_THRESH = 200;//official // chassis_energy_part_param_.GRAY_THRESH = 225; chassis_energy_part_param_.SPLIT_GRAY_THRESH = 230; chassis_energy_part_param_.FAN_GRAY_THRESH = 75; @@ -201,8 +203,8 @@ void Energy::initEnergyPartParam() { chassis_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_MIN = 0; chassis_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MIN = 55; chassis_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MAX = 95; - chassis_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MIN = 13; - chassis_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MAX = 35; + chassis_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MIN = 8; + 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; chassis_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MIN = 2.7; diff --git a/energy/src/energy/find/energy_finder.cpp b/energy/src/energy/find/energy_finder.cpp index 666b373..207cd64 100644 --- a/energy/src/energy/find/energy_finder.cpp +++ b/energy/src/energy/find/energy_finder.cpp @@ -68,8 +68,6 @@ int Energy::findArmors(const cv::Mat src) { std::vector > armor_contours_external;//用总轮廓减去外轮廓,只保留内轮廓,除去流动条的影响。 ArmorStruct(src_bin);//图像膨胀,防止图像断开并更方便寻找 -// imshow("armor struct", src_bin); - findContours(src_bin, armor_contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE); // findContours(src_bin, armor_contours_external, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE); @@ -100,6 +98,7 @@ int Energy::findArmors(const cv::Mat src) { // } } + // cout< cur_size.width ? cur_size.height : cur_size.width; // float width = cur_size.height < cur_size.width ? cur_size.height : cur_size.width; -// if (length / width > 2 && width > 5) { +// if (length / width > 4 && width > 7 && width<30) { // cout << cur_rect.center << endl; // flow_strip = cv::minAreaRect(flow_strip_contour); // cout << "flow strip area: " << length << '\t' << width << endl; @@ -261,7 +260,7 @@ bool Energy::findCenterROI(const cv::Mat src) { Point2f p2p(flow_strip.center.x - target_point.x, flow_strip.center.y - target_point.y); p2p = p2p / pointDistance(flow_strip.center, target_point);//单位化 - center_ROI = cv::RotatedRect(cv::Point2f(flow_strip.center + p2p * length * 1.4), + center_ROI = cv::RotatedRect(cv::Point2f(flow_strip.center + p2p * length * 1.25), Size2f(length * 1.4, length * 1.4), -90); return true; diff --git a/energy/src/energy/run.cpp b/energy/src/energy/run.cpp index 63eaa0c..17d2a87 100644 --- a/energy/src/energy/run.cpp +++ b/energy/src/energy/run.cpp @@ -16,11 +16,12 @@ void Energy::run(cv::Mat &gimbal_src, cv::Mat &chassis_src) { if (chassis_src.empty()) run(gimbal_src);//仅拥有云台摄像头则调用单摄像头的run函数 else if (is_gimbal) { - energy_part_param_ = gimbal_energy_part_param_; +// energy_part_param_ = chassis_energy_part_param_; + energy_part_param_ = chassis_energy_part_param_; clearAll(); initImage(gimbal_src); -// findFans(gimbal_src); -// showFans("fan",gimbal_src); + findFans(gimbal_src); + showFans("fan",gimbal_src); if (findArmors(gimbal_src) < 1)return; if (show_energy)showArmors("armor", gimbal_src); @@ -36,6 +37,7 @@ void Energy::run(cv::Mat &gimbal_src, cv::Mat &chassis_src) { initEnergy(); destroyAllWindows(); } else if (is_chassis) { +// energy_part_param_ = chassis_energy_part_param_; energy_part_param_ = chassis_energy_part_param_; clearAll(); initImage(chassis_src); @@ -45,8 +47,7 @@ void Energy::run(cv::Mat &gimbal_src, cv::Mat &chassis_src) { if (findArmors(chassis_src) < 1)return; if (show_energy)showArmors("armor", chassis_src); - if (!findFlowStripFan(chassis_src))return; - showFlowStripFan("flow strip fan", chassis_src); + if (!findFlowStripFan(chassis_src)) return; if (!findTargetInFlowStripFan()) return; if (!findCenterROI(chassis_src))return; if (show_energy)showFlowStripFan("strip", chassis_src); diff --git a/main.cpp b/main.cpp index 6d36b63..07853a4 100644 --- a/main.cpp +++ b/main.cpp @@ -64,8 +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/sun/项目/energy_video/148.avi"); - video_chassis = new VideoWrapper("/home/sun/项目/energy_video/148.avi"); +// 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/RM2019 能量机关视频/大能量机关(蓝+开灯).mov"); + video_chassis = new VideoWrapper("/home/sjturm/Desktop/RM2019 能量机关视频/大能量机关(蓝+开灯).mov"); } if (video_gimbal->init()) { LOGM("video_gimbal source initialization successfully.");