Merge remote-tracking branch 'origin/master' into anti-top

This commit is contained in:
sun
2019-07-16 18:46:07 +08:00
5 changed files with 21 additions and 16 deletions

View File

@@ -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);

View File

@@ -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;

View File

@@ -68,8 +68,6 @@ int Energy::findArmors(const cv::Mat src) {
std::vector<vector<Point> > 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<<armors.size()<<endl;
// showArmors("armor",src);
@@ -160,7 +159,7 @@ bool Energy::findCenterR(const cv::Mat src) {
//----------------------------------------------------------------------------------------------------------------------
// 此函数用于判断找到的矩形候选区是否为含流动条的扇叶
// ---------------------------------------------------------------------------------------------------------------------
bool Energy::findFlowStripFan(const cv::Mat src) {
bool Energy:: findFlowStripFan(const cv::Mat src) {
if (src.empty())return false;
static Mat src_bin;
static Mat src_copy;
@@ -228,7 +227,7 @@ bool Energy::findFlowStrip(const cv::Mat src) {
// Size2f cur_size = cur_rect.size;
// float length = cur_size.height > 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;

View File

@@ -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);

View File

@@ -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.");