From 75ce387742d331a348a110f084450960136285db Mon Sep 17 00:00:00 2001 From: sun Date: Sun, 7 Jul 2019 20:37:05 +0800 Subject: [PATCH] energy changed --- armor/src/armor_finder/armor_finder.cpp | 4 ++-- energy/include/energy/energy.h | 1 + energy/src/energy/calibrate/hsv_filter.cpp | 28 ++++++++++++++++++++++ energy/src/energy/calibrate/split.cpp | 8 +++---- energy/src/energy/run.cpp | 13 +++++----- main.cpp | 6 ++--- others/src/camera/camera_wrapper.cpp | 2 +- 7 files changed, 45 insertions(+), 17 deletions(-) create mode 100644 energy/src/energy/calibrate/hsv_filter.cpp diff --git a/armor/src/armor_finder/armor_finder.cpp b/armor/src/armor_finder/armor_finder.cpp index 3082dfb..c17f93b 100644 --- a/armor/src/armor_finder/armor_finder.cpp +++ b/armor/src/armor_finder/armor_finder.cpp @@ -29,8 +29,8 @@ void ArmorFinder::run(cv::Mat &src) { showArmorBox("box", src, armor_box, boxid); cv::waitKey(1); } -// stateSearchingTarget(src_use); -// return; + stateSearchingTarget(src_use); + return; switch (state){ case SEARCHING_STATE: if(stateSearchingTarget(src_use)){ diff --git a/energy/include/energy/energy.h b/energy/include/energy/energy.h index 3f0cb8f..9d2ccc7 100644 --- a/energy/include/energy/energy.h +++ b/energy/include/energy/energy.h @@ -118,6 +118,7 @@ private: void splitBayerBG(cv::Mat src, cv::Mat &blue, cv::Mat &red);//拜耳阵列分离 void imagePreprocess(cv::Mat &src);//图像通道分离 + void hsvFilter(cv::Mat &src);//此函数通过HSV颜色空间对图像纯度进行限制,进行滤光 void StructingElementClose(cv::Mat &src,int length, int width);//闭运算 void StructingElementErodeDilate(cv::Mat &src);//腐蚀和膨胀 diff --git a/energy/src/energy/calibrate/hsv_filter.cpp b/energy/src/energy/calibrate/hsv_filter.cpp new file mode 100644 index 0000000..278c8f7 --- /dev/null +++ b/energy/src/energy/calibrate/hsv_filter.cpp @@ -0,0 +1,28 @@ +// +// Created by sun on 19-7-7. +// + +#include "energy/energy.h" + +using namespace std; +using namespace cv; + + + +//---------------------------------------------------------------------------------------------------------------------- +// 此函数用于利用HSV颜色空间对图像进行预处理 +// --------------------------------------------------------------------------------------------------------------------- + +void Energy::hsvFilter(cv::Mat &src){ + Mat hsv, hsv_in_range; + cvtColor(src, hsv, CV_BGR2HSV); +// imshow("hsv", hsv); + vector hsv_channels; + split(hsv, hsv_channels); + Mat H = hsv_channels.at(0); + Mat S = hsv_channels.at(1); + Mat V = hsv_channels.at(2); +// imshow("S", S); + inRange(hsv,Scalar(0,150,0),Scalar(180,255,255),hsv_in_range); +// imshow("in range", hsv_in_range); +} \ No newline at end of file diff --git a/energy/src/energy/calibrate/split.cpp b/energy/src/energy/calibrate/split.cpp index 3c6dc4b..cdafbfb 100644 --- a/energy/src/energy/calibrate/split.cpp +++ b/energy/src/energy/calibrate/split.cpp @@ -52,9 +52,9 @@ void Energy::imagePreprocess(cv::Mat &src) { { std::vector channels; split(src, channels); - resize(channels.at(0), src_blue, Size(SRC_WIDTH, SRC_HEIGHT)); - resize(channels.at(1), src_green, Size(SRC_WIDTH, SRC_HEIGHT)); - resize(channels.at(2), src_red, Size(SRC_WIDTH, SRC_HEIGHT)); + resize(channels.at(0), src_blue, Size(src.size().width/2, src.size().height/2)); + resize(channels.at(1), src_green, Size(src.size().width/2, src.size().height/2)); + resize(channels.at(2), src_red, Size(src.size().width/2, src.size().height/2)); if(ally_color == ALLY_RED) { src = src_red-src_blue; @@ -64,7 +64,7 @@ void Energy::imagePreprocess(cv::Mat &src) { //src=src_blue; } } - cv::resize(src, src, cv::Size(640, 480), 2); + cv::resize(src, src, cv::Size(src.size().width * 2, src.size().height * 2), 2); threshold(src, src, energy_part_param_.SPLIT_GRAY_THRESH, 255, THRESH_BINARY); } diff --git a/energy/src/energy/run.cpp b/energy/src/energy/run.cpp index 8e9d549..41372b1 100644 --- a/energy/src/energy/run.cpp +++ b/energy/src/energy/run.cpp @@ -73,7 +73,7 @@ int Energy::runBig(cv::Mat &gimble_src, cv::Mat &chassis_src){ // 此函数为大能量机关模式主控制流函数,且步兵仅拥有云台摄像头 // --------------------------------------------------------------------------------------------------------------------- int Energy::runBig(cv::Mat &gimble_src){ -// imshow("src",src); + imshow("src",gimble_src); fans.clear(); armors.clear(); centerRs.clear(); @@ -82,22 +82,21 @@ int Energy::runBig(cv::Mat &gimble_src){ changeMark(); if (isMark)return 0; -// imagePreprocess(src); -// imshow("img_preprocess",src); +// imagePreprocess(gimble_src); +// imshow("img_preprocess", gimble_src); threshold(gimble_src, gimble_src, energy_part_param_.GRAY_THRESH, 255, THRESH_BINARY); -// imshow("bin",src); + imshow("bin",gimble_src); fans_cnt = findFan(gimble_src, last_fans_cnt); // cout<<"fans_cnt: "<0)showFanContours("fan",src); -// fans_cnt=0; armors_cnt = findArmor(gimble_src, last_armors_cnt); // cout<<"armors_cnt: "<0) showArmorContours("armor",src); +// if(armors_cnt>0) showArmorContours("armor",gimble_src); if(armors_cnt != fans_cnt+1) return 0; @@ -142,7 +141,7 @@ int Energy::runSmall(cv::Mat &gimble_src){ imshow("gimble src", gimble_src); if(gimble_src.type()== CV_8UC3)cvtColor(gimble_src, gimble_src, COLOR_BGR2GRAY); fans.clear(); - armors.clear(); + armors.clear();- threshold(gimble_src, gimble_src, energy_part_param_.GRAY_THRESH, 255, THRESH_BINARY); imshow("bin",gimble_src); fans_cnt = findFan(gimble_src, last_fans_cnt); diff --git a/main.cpp b/main.cpp index b7cbd4e..aa4fe2d 100644 --- a/main.cpp +++ b/main.cpp @@ -56,8 +56,8 @@ int main(int argc, char *argv[]) { video_gimble = new CameraWrapper(0/*, "armor"*/); video_chassis = new CameraWrapper(1/*, "energy"*/); } else { - video_gimble = new VideoWrapper("/Users/leo/Desktop/videos/179.avi"); - video_chassis = new VideoWrapper("/Users/leo/Desktop/videos/179.avi"); + video_gimble = new VideoWrapper("/home/sun/项目/energy_video/official_r_l.mp4"); + video_chassis = new VideoWrapper("/home/sun/项目/energy_video/energy_test.avi"); } if (video_gimble->init()) { LOGM("video_gimble source initialization successfully."); @@ -117,7 +117,7 @@ int main(int argc, char *argv[]) { energy.runSmall(gimble_src); } } - cv::waitKey(1); +// cv::waitKey(1); }); } while (ok); diff --git a/others/src/camera/camera_wrapper.cpp b/others/src/camera/camera_wrapper.cpp index 24c16ec..3aee716 100644 --- a/others/src/camera/camera_wrapper.cpp +++ b/others/src/camera/camera_wrapper.cpp @@ -76,7 +76,7 @@ bool CameraWrapper::init() { #elif defined(Linux) CameraSetAeState(h_camera, false); CameraSetExposureTime(h_camera, 10*1000); - CameraSetAnalogGain(h_camera, 40); + CameraSetAnalogGain(h_camera, 30); if(mode == 0){ CameraSetGain(h_camera, 100, 100, 100); CameraSetLutMode(h_camera, LUTMODE_PRESET);