From cd5528cfb7c9b1b34f1abd9718879373ee34b30a Mon Sep 17 00:00:00 2001 From: xinyang <895639507@qq.com> Date: Tue, 9 Jul 2019 18:45:00 +0800 Subject: [PATCH] fix bug. --- armor/include/armor_finder/armor_finder.h | 4 +--- armor/src/armor_finder/armor_finder.cpp | 16 +--------------- .../searching_state/searching_state.cpp | 2 +- 3 files changed, 3 insertions(+), 19 deletions(-) diff --git a/armor/include/armor_finder/armor_finder.h b/armor/include/armor_finder/armor_finder.h index bfbd5b7..3e23945 100644 --- a/armor/include/armor_finder/armor_finder.h +++ b/armor/include/armor_finder/armor_finder.h @@ -30,7 +30,7 @@ private: typedef cv::TrackerKCF TrackerToUse; // Tracker类型定义 typedef enum{ - WEAKSEARCHING_STATE, SEARCHING_STATE, TRACKING_STATE, STANDBY_STATE + SEARCHING_STATE, TRACKING_STATE, STANDBY_STATE } State; // 自瞄状态枚举定义 const uint8_t &enemy_color; // 敌方颜色,引用外部变量,自动变化 @@ -41,8 +41,6 @@ private: Classifier classifier; // CNN分类器对象实例,用于数字识别 int contour_area; // 装甲区域亮点个数,用于数字识别未启用时判断是否跟丢(已弃用) int tracking_cnt; // 记录追踪帧数,用于定时退出追踪 - int miss_cnt; // - int weak_cnt; // Serial &serial; // 串口对象,引用外部变量,用于和能量机关共享同一个变量 const uint8_t &use_classifier; // 标记是否启用CNN分类器,引用外部变量,自动变化 diff --git a/armor/src/armor_finder/armor_finder.cpp b/armor/src/armor_finder/armor_finder.cpp index a5ee01f..0e59be3 100644 --- a/armor/src/armor_finder/armor_finder.cpp +++ b/armor/src/armor_finder/armor_finder.cpp @@ -28,9 +28,7 @@ ArmorFinder::ArmorFinder(uint8_t &color, Serial &u, const string ¶s_folder, contour_area(0), use_classifier(use), boxid(-1), - tracking_cnt(0), - miss_cnt(0), - weak_cnt(0) + tracking_cnt(0) { } @@ -44,16 +42,8 @@ void ArmorFinder::run(cv::Mat &src) { // stateSearchingTarget(src_use); // for debug // return; switch (state){ - case WEAKSEARCHING_STATE: - if(stateSearchingTarget(src_use) && ++weak_cnt>5){ - miss_cnt = 0; - state = SEARCHING_STATE; - }else{ - weak_cnt = 0; - } case SEARCHING_STATE: if(stateSearchingTarget(src_use)){ - miss_cnt = 0; if((armor_box & cv::Rect2d(0, 0, 640, 480)) == armor_box) { // 判断装甲板区域是否脱离图像区域 if(!classifier || !use_classifier){ /* 如果分类器不可用或者不使用分类器 */ cv::Mat roi = src_use.clone()(armor_box), roi_gray; /* 就使用装甲区域亮点数判断是否跟丢 */ @@ -67,14 +57,10 @@ void ArmorFinder::run(cv::Mat &src) { tracking_cnt = 0; LOGM(STR_CTR(WORD_LIGHT_CYAN, "into track")); } - }else if(++miss_cnt>100){ - weak_cnt = 0; - state = WEAKSEARCHING_STATE; } break; case TRACKING_STATE: if(!stateTrackingTarget(src_use) || ++tracking_cnt>100){ // 最多追踪100帧图像 - miss_cnt = 0; state = SEARCHING_STATE; LOGM(STR_CTR(WORD_LIGHT_YELLOW ,"into search!")); } diff --git a/armor/src/armor_finder/searching_state/searching_state.cpp b/armor/src/armor_finder/searching_state/searching_state.cpp index 6b692d0..9c10a5a 100644 --- a/armor/src/armor_finder/searching_state/searching_state.cpp +++ b/armor/src/armor_finder/searching_state/searching_state.cpp @@ -291,7 +291,7 @@ bool ArmorFinder::stateSearchingTarget(cv::Mat &src) { showArmorBoxVector("boxes", src, armor_boxes); cv::waitKey(1); } - if (classifier && use_classifier && state!=WEAKSEARCHING_STATE) { + if (classifier && use_classifier) { for (auto box : armor_boxes) { cv::Mat roi = src(box).clone(); cv::resize(roi, roi, cv::Size(48, 36));