Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -92,7 +92,6 @@ private:
|
||||
float sum_yaw, sum_pitch;//yaw和pitch的累计误差,即PID中积分项
|
||||
|
||||
systime time_start_guess;
|
||||
systime time_start_energy;
|
||||
|
||||
cv::RotatedRect centerR;//风车中心字母R的可能候选区
|
||||
cv::RotatedRect flow_strip;//图像中所有流动条(理论上只有一个)
|
||||
|
||||
@@ -17,7 +17,8 @@ using std::vector;
|
||||
// ---------------------------------------------------------------------------------------------------------------------
|
||||
struct EnergyPartParam {
|
||||
int GRAY_THRESH;//二值化阈值
|
||||
int SUB_GRAY_THRESH;//备用二值化阈值
|
||||
int RED_GRAY_THRESH;//红方二值化阈值
|
||||
int BLUE_GRAY_THRESH;//蓝方二值化阈值
|
||||
int SPLIT_GRAY_THRESH;//通道分离二值化阈值
|
||||
int FAN_GRAY_THRESH;//扇叶识别二值化阈值
|
||||
int ARMOR_GRAY_THRESH;//装甲板识别二值化阈值
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
using namespace std;
|
||||
using namespace cv;
|
||||
|
||||
extern McuData mcu_data;
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
// 此函数用于清空各vector
|
||||
@@ -26,15 +28,11 @@ void Energy::clearAll() {
|
||||
void Energy::initImage(cv::Mat &src) {
|
||||
// imagePreprocess(src);
|
||||
// if(show_process)imshow("img_preprocess", src);
|
||||
systime cur_time;
|
||||
getsystime(cur_time);
|
||||
float interval = getTimeIntervalms(cur_time, time_start_energy);
|
||||
|
||||
if (src.type() == CV_8UC3)cvtColor(src, src, COLOR_BGR2GRAY);
|
||||
if(interval > 3000 && !is_find_target){
|
||||
threshold(src, src, energy_part_param_.SUB_GRAY_THRESH, 255, THRESH_BINARY);
|
||||
}else{
|
||||
threshold(src, src, energy_part_param_.GRAY_THRESH, 255, THRESH_BINARY);
|
||||
if (mcu_data.enemy_color == ENEMY_BLUE){
|
||||
threshold(src, src, energy_part_param_.RED_GRAY_THRESH, 255, THRESH_BINARY);
|
||||
} else if(mcu_data.enemy_color == ENEMY_RED){
|
||||
threshold(src, src, energy_part_param_.BLUE_GRAY_THRESH, 255, THRESH_BINARY);
|
||||
}
|
||||
if (show_process)imshow("bin", src);
|
||||
if (show_energy)waitKey(1);
|
||||
|
||||
@@ -83,16 +83,16 @@ void Energy::initEnergy() {
|
||||
void Energy::initEnergyPartParam() {
|
||||
// gimbal_energy_part_param_.GRAY_THRESH = 120;//home
|
||||
// gimbal_energy_part_param_.GRAY_THRESH = 200;//official
|
||||
gimbal_energy_part_param_.GRAY_THRESH = 180;//game
|
||||
gimbal_energy_part_param_.SUB_GRAY_THRESH = 100;
|
||||
gimbal_energy_part_param_.RED_GRAY_THRESH = 180;//game
|
||||
gimbal_energy_part_param_.BLUE_GRAY_THRESH = 100;//game
|
||||
gimbal_energy_part_param_.SPLIT_GRAY_THRESH = 180;
|
||||
gimbal_energy_part_param_.FAN_GRAY_THRESH = 75;
|
||||
gimbal_energy_part_param_.ARMOR_GRAY_THRESH = 80;
|
||||
|
||||
gimbal_energy_part_param_.FAN_CONTOUR_AREA_MAX = 3000;
|
||||
gimbal_energy_part_param_.FAN_CONTOUR_AREA_MIN = 500;
|
||||
gimbal_energy_part_param_.FAN_CONTOUR_AREA_MAX = 5000;
|
||||
gimbal_energy_part_param_.FAN_CONTOUR_AREA_MIN = 1500;
|
||||
gimbal_energy_part_param_.FAN_CONTOUR_LENGTH_MIN = 55;
|
||||
gimbal_energy_part_param_.FAN_CONTOUR_LENGTH_MAX = 95;
|
||||
gimbal_energy_part_param_.FAN_CONTOUR_LENGTH_MAX = 100;
|
||||
gimbal_energy_part_param_.FAN_CONTOUR_WIDTH_MIN = 20;
|
||||
gimbal_energy_part_param_.FAN_CONTOUR_WIDTH_MAX = 52;
|
||||
gimbal_energy_part_param_.FAN_CONTOUR_HW_RATIO_MAX = 3.5;
|
||||
|
||||
@@ -53,8 +53,6 @@ void Energy::setBigEnergyInit() {
|
||||
initEnergy();
|
||||
initEnergyPartParam();
|
||||
|
||||
getsystime(time_start_energy);
|
||||
|
||||
is_big = true;
|
||||
is_small = false;
|
||||
is_gimbal = true;
|
||||
|
||||
@@ -79,22 +79,12 @@ void Energy::runBig(cv::Mat &gimbal_src) {
|
||||
if (findArmors(gimbal_src) < 1)return;
|
||||
if (show_energy)showArmors("armor", gimbal_src);
|
||||
if (!findFlowStripFan(gimbal_src)) {
|
||||
if (!findFlowStripWeak(gimbal_src)){
|
||||
is_find_target = false;
|
||||
return;
|
||||
}
|
||||
if (!findFlowStripWeak(gimbal_src)) return;
|
||||
} else {
|
||||
if (show_energy)showFlowStripFan("strip fan", gimbal_src);
|
||||
if (!findTargetInFlowStripFan()) {
|
||||
is_find_target = false;
|
||||
return;
|
||||
if (!findTargetInFlowStripFan()) return;
|
||||
if (!findFlowStrip(gimbal_src))return;
|
||||
}
|
||||
if (!findFlowStrip(gimbal_src)){
|
||||
is_find_target = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
is_find_target = true;
|
||||
if (!findCenterROI(gimbal_src))return;
|
||||
if (show_energy)showFlowStrip("strip", gimbal_src);
|
||||
if (!findCenterR(gimbal_src))return;
|
||||
@@ -135,22 +125,12 @@ void Energy::runSmall(cv::Mat &gimbal_src) {
|
||||
if (findArmors(gimbal_src) < 1)return;
|
||||
if (show_energy)showArmors("armor", gimbal_src);
|
||||
if (!findFlowStripFan(gimbal_src)) {
|
||||
if (!findFlowStripWeak(gimbal_src)){
|
||||
is_find_target = false;
|
||||
return;
|
||||
}
|
||||
if (!findFlowStripWeak(gimbal_src)) return;
|
||||
} else {
|
||||
if (show_energy)showFlowStripFan("strip fan", gimbal_src);
|
||||
if (!findTargetInFlowStripFan()) {
|
||||
is_find_target = false;
|
||||
return;
|
||||
if (!findTargetInFlowStripFan()) return;
|
||||
if (!findFlowStrip(gimbal_src)) return;
|
||||
}
|
||||
if (!findFlowStrip(gimbal_src)){
|
||||
is_find_target = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
is_find_target = true;
|
||||
if (show_energy)showTarget("target", gimbal_src);
|
||||
fans_cnt = findFans(gimbal_src);
|
||||
if (show_energy)showFans("fans", gimbal_src);
|
||||
|
||||
29
main.cpp
29
main.cpp
@@ -30,7 +30,7 @@ using namespace std;
|
||||
McuData mcu_data = { // 单片机端回传结构体
|
||||
0, // 当前云台yaw角
|
||||
0, // 当前云台pitch角
|
||||
SMALL_ENERGY_STATE, // 当前状态,自瞄-大符-小符
|
||||
BIG_ENERGY_STATE, // 当前状态,自瞄-大符-小符
|
||||
0, // 云台角度标记位
|
||||
1, // 是否启用数字识别
|
||||
ENEMY_RED, // 敌方颜色
|
||||
@@ -66,8 +66,8 @@ int main(int argc, char *argv[]) {
|
||||
video_gimbal = new CameraWrapper(ARMOR_CAMERA_EXPOSURE, ARMOR_CAMERA_GAIN, 2/*, "armor"*/);
|
||||
video_chassis = new CameraWrapper(ENERGY_CAMERA_EXPOSURE, ENERGY_CAMERA_GAIN, 2/*, "energy"*/);
|
||||
} else {
|
||||
video_gimbal = new VideoWrapper("/home/sun/桌面/video_8.7/round1-8-5-7-small.avi");
|
||||
video_chassis = new VideoWrapper("/home/sun/桌面/video_8.7/round1-8-5-7-small.avi");
|
||||
video_gimbal = new VideoWrapper("/home/sun/桌面/video_8.8/8.7.4-big.avi");
|
||||
video_chassis = new VideoWrapper("/home/sun/桌面/video_8.8/8.7.4-big.avi");
|
||||
}
|
||||
if (video_gimbal->init()) {
|
||||
LOGM("video_gimbal source initialization successfully.");
|
||||
@@ -108,23 +108,26 @@ int main(int argc, char *argv[]) {
|
||||
LOGW("video_gimbal source unavailable!");
|
||||
}
|
||||
}
|
||||
checkReconnect(video_chassis->read(chassis_src));
|
||||
// checkReconnect(video_chassis->read(chassis_src));
|
||||
energy.setBigEnergyInit();
|
||||
}
|
||||
last_state = curr_state;//更新上一帧状态
|
||||
ok = checkReconnect(video_gimbal->read(gimbal_src));
|
||||
video_chassis->read(chassis_src);
|
||||
// video_chassis->read(chassis_src);
|
||||
#ifdef GIMBAL_FLIP_MODE
|
||||
flip(gimbal_src, gimbal_src, GIMBAL_FLIP_MODE);
|
||||
#endif
|
||||
#ifdef CHASSIS_FLIP_MODE
|
||||
flip(chassis_src, chassis_src, CHASSIS_FLIP_MODE);
|
||||
#endif
|
||||
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.runBig(gimbal_src, chassis_src);
|
||||
// energy.runBig(gimbal_src);
|
||||
//#ifdef CHASSIS_FLIP_MODE
|
||||
// flip(chassis_src, chassis_src, CHASSIS_FLIP_MODE);
|
||||
//#endif
|
||||
// if (!from_camera) extract(gimbal_src, chassis_src);
|
||||
// if (save_video) saveVideos(gimbal_src, chassis_src);//保存视频
|
||||
// if (show_origin) showOrigin(gimbal_src, chassis_src);//显示原始图像
|
||||
if (!from_camera) extract(gimbal_src);
|
||||
if (save_video) saveVideos(gimbal_src);//保存视频
|
||||
if (show_origin) showOrigin(gimbal_src);//显示原始图像
|
||||
// energy.runBig(gimbal_src, chassis_src);
|
||||
energy.runBig(gimbal_src);
|
||||
} else if (curr_state == SMALL_ENERGY_STATE) {
|
||||
if (last_state != SMALL_ENERGY_STATE) {
|
||||
LOGM(STR_CTR(WORD_GREEN, "Start Small Energy!"));
|
||||
|
||||
Reference in New Issue
Block a user