This commit is contained in:
JiatongSun
2019-04-28 11:00:20 +08:00
parent e3fc7cf05c
commit c2b4bdf4cd
7 changed files with 64 additions and 32 deletions

View File

@@ -11,7 +11,7 @@ using std::vector;
void Energy::StructingElementClose(cv::Mat &src){ void Energy::StructingElementClose(cv::Mat &src){
if (src.empty())return; if (src.empty())return;
//threshold(src, src, energy_part_param_.CAMERA_GRAY_THRESH, 255, THRESH_BINARY); //threshold(src, src, energy_part_param_.CAMERA_GRAY_THRESH, 255, THRESH_BINARY);
Mat element = getStructuringElement(MORPH_RECT, Size(6, 6)); Mat element = getStructuringElement(MORPH_RECT, Size(10, 10));
morphologyEx(src, src, MORPH_CLOSE, element); morphologyEx(src, src, MORPH_CLOSE, element);
} }

View File

@@ -36,6 +36,7 @@ int Energy::findFan(const cv::Mat &src, vector<EnergyPart> &fans, int &last_fans
float length = cur_size.height > cur_size.width ? cur_size.height : cur_size.width; 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; float width = cur_size.height < cur_size.width ? cur_size.height : cur_size.width;
cout<<"fan area: "<<length<<'\t'<<width<<endl;
// if(length>20&&width>20){ // if(length>20&&width>20){
// cout<<cur_rect.center; // cout<<cur_rect.center;

View File

@@ -13,16 +13,16 @@ void Energy::initEnergyPartParam() {
energy_part_param_.RPM = 10; energy_part_param_.RPM = 10;
energy_part_param_.HIT_TIME = 1.14; energy_part_param_.HIT_TIME = 1.14;
energy_part_param_.GRAY_THRESH = 240; energy_part_param_.GRAY_THRESH = 220;
energy_part_param_.SPLIT_GRAY_THRESH = 60; energy_part_param_.SPLIT_GRAY_THRESH = 60;
energy_part_param_.FAN_GRAY_THRESH = 75; energy_part_param_.FAN_GRAY_THRESH = 75;
energy_part_param_.ARMOR_GRAY_THRESH = 80; energy_part_param_.ARMOR_GRAY_THRESH = 80;
energy_part_param_.FAN_CONTOUR_AREA_MAX = 17000; energy_part_param_.FAN_CONTOUR_AREA_MAX = 17000;
energy_part_param_.FAN_CONTOUR_AREA_MIN = 0; energy_part_param_.FAN_CONTOUR_AREA_MIN = 0;
energy_part_param_.FAN_CONTOUR_LENGTH_MIN = 100; energy_part_param_.FAN_CONTOUR_LENGTH_MIN = 90;
energy_part_param_.FAN_CONTOUR_LENGTH_MAX = 140; energy_part_param_.FAN_CONTOUR_LENGTH_MAX = 140;
energy_part_param_.FAN_CONTOUR_WIDTH_MIN = 40; energy_part_param_.FAN_CONTOUR_WIDTH_MIN = 35;
energy_part_param_.FAN_CONTOUR_WIDTH_MAX = 60; energy_part_param_.FAN_CONTOUR_WIDTH_MAX = 60;
energy_part_param_.FAN_CONTOUR_HW_RATIO_MAX = 4; energy_part_param_.FAN_CONTOUR_HW_RATIO_MAX = 4;
energy_part_param_.FAN_CONTOUR_HW_RATIO_MIN = 1; energy_part_param_.FAN_CONTOUR_HW_RATIO_MIN = 1;

View File

@@ -12,7 +12,7 @@ extern float curr_yaw, curr_pitch, mark_yaw, mark_pitch;
extern int mark; extern int mark;
int Energy::run(cv::Mat &src){ int Energy::run(cv::Mat &src){
// imshow("src",src); imshow("src",src);
fans.clear(); fans.clear();
armors.clear(); armors.clear();
fanPosition.clear(); fanPosition.clear();
@@ -25,11 +25,11 @@ int Energy::run(cv::Mat &src){
// if(first_armor_centers.size()>200)first_armor_centers.clear(); // if(first_armor_centers.size()>200)first_armor_centers.clear();
// cout<<"first_armor_centers.size(): "<<first_armor_centers.size()<<endl; // cout<<"first_armor_centers.size(): "<<first_armor_centers.size()<<endl;
imagePreprocess(src); // imagePreprocess(src);
// imshow("img_preprocess",src); // imshow("img_preprocess",src);
threshold(src, src, energy_part_param_.GRAY_THRESH, 255, THRESH_BINARY); threshold(src, src, energy_part_param_.GRAY_THRESH, 255, THRESH_BINARY);
// imshow("bin",src); imshow("bin",src);
fans_cnt = findFan(src, fans, last_fans_cnt); fans_cnt = findFan(src, fans, last_fans_cnt);
@@ -51,8 +51,8 @@ int Energy::run(cv::Mat &src){
cout<<"all_armor_centers.size(): "<<all_armor_centers.size()<<endl; cout<<"all_armor_centers.size(): "<<all_armor_centers.size()<<endl;
cycleLeastFit(); cycleLeastFit();
// cycle_center = cv::Point(212,246); cycle_center = cv::Point(321,319);
// radius = 123.942; radius = 109.178;
attack_distance = ATTACK_DISTANCE * 123.323 / radius; attack_distance = ATTACK_DISTANCE * 123.323 / radius;
getFanPosition(fanPosition, fans, cycle_center, radius); getFanPosition(fanPosition, fans, cycle_center, radius);

View File

@@ -51,13 +51,13 @@ int main(int argc, char *argv[])
WrapperHead *video_armor; WrapperHead *video_armor;
WrapperHead *video_energy; WrapperHead *video_energy;
if(from_camera) { if(from_camera) {
video_armor = new CameraWrapper("armor"); // video_armor = new CameraWrapper();
video_energy = new CameraWrapper("energy"); video_energy = new CameraWrapper();
}else { }else {
video_armor = new VideoWrapper("r_l_640.avi"); video_armor = new VideoWrapper("r_l_640.avi");
video_energy = new VideoWrapper("r_l_640.avi"); video_energy = new VideoWrapper("r_l_640.avi");
} }
if (video_energy->init() && video_armor->init()) { if (video_energy->init()) {
cout << "Video source initialization successfully." << endl; cout << "Video source initialization successfully." << endl;
} }
@@ -69,7 +69,7 @@ int main(int argc, char *argv[])
energy.setAllyColor(ally_color); energy.setAllyColor(ally_color);
energy.setRotation(energy_part_rotation); energy.setRotation(energy_part_rotation);
while (video_energy->read(energy_src) && video_armor->read(armor_src)) while (video_energy->read(energy_src) && video_energy->read(armor_src))
{ {
if(show_origin) { if(show_origin) {
imshow("enery src", energy_src); imshow("enery src", energy_src);
@@ -90,7 +90,7 @@ int main(int argc, char *argv[])
break; break;
} }
} }
delete video_energy, video_armor; delete video_energy;
cout << "Program fails. Restarting" << endl; cout << "Program fails. Restarting" << endl;
} }
@@ -119,7 +119,7 @@ void uartReceive(Uart* uart){
} }
memcpy(&curr_yaw, buffer, 4); memcpy(&curr_yaw, buffer, 4);
memcpy(&curr_pitch, buffer+4, 4); memcpy(&curr_pitch, buffer+4, 4);
// LOGM("Get yaw:%f pitch:%f", curr_yaw, curr_pitch); LOGM("Get yaw:%f pitch:%f", curr_yaw, curr_pitch);
if(buffer[9] == 1){ if(buffer[9] == 1){
if(mark == 0){ if(mark == 0){
mark = 1; mark = 1;

View File

@@ -19,6 +19,7 @@
class CameraWrapper: public WrapperHead { class CameraWrapper: public WrapperHead {
private: private:
const std::string name; const std::string name;
int mode;
unsigned char* rgb_buffer; unsigned char* rgb_buffer;
int camera_cnts; int camera_cnts;
@@ -37,6 +38,9 @@ private:
public: public:
CameraWrapper(); CameraWrapper();
CameraWrapper(const std::string &n); CameraWrapper(const std::string &n);
CameraWrapper(int camera_mode);
CameraWrapper(const std::string &n,int camera_mode);
~CameraWrapper() final; ~CameraWrapper() final;
bool init() final; bool init() final;

View File

@@ -9,16 +9,36 @@ using std::cout;
using std::endl; using std::endl;
using namespace cv; using namespace cv;
CameraWrapper::CameraWrapper(const std::string &n): CameraWrapper::CameraWrapper():
name(n), name("NULL"),
mode(1),
camera_cnts(2), camera_cnts(2),
camera_status(-1), camera_status(-1),
iplImage(nullptr), iplImage(nullptr),
channel(3){ channel(3){
} }
CameraWrapper::CameraWrapper(): CameraWrapper::CameraWrapper(const std::string &n):
name(n),
mode(1),
camera_cnts(2),
camera_status(-1),
iplImage(nullptr),
channel(3){
}
CameraWrapper::CameraWrapper(int camera_mode):
name("NULL"), name("NULL"),
mode(camera_mode),
camera_cnts(2),
camera_status(-1),
iplImage(nullptr),
channel(3){
}
CameraWrapper::CameraWrapper(const std::string &n,int camera_mode):
name(n),
mode(camera_mode),
camera_cnts(2), camera_cnts(2),
camera_status(-1), camera_status(-1),
iplImage(nullptr), iplImage(nullptr),
@@ -68,7 +88,7 @@ bool CameraWrapper::init() {
rgb_buffer = (unsigned char *)malloc(tCapability.sResolutionRange.iHeightMax * rgb_buffer = (unsigned char *)malloc(tCapability.sResolutionRange.iHeightMax *
tCapability.sResolutionRange.iWidthMax * 3); tCapability.sResolutionRange.iWidthMax * 3);
if(mode == 0){
// 不使用自动曝光 // 不使用自动曝光
CameraSetAeState(h_camera, false); CameraSetAeState(h_camera, false);
// 曝光时间10ms // 曝光时间10ms
@@ -77,6 +97,13 @@ bool CameraWrapper::init() {
CameraSetAnalogGain(h_camera, 63); CameraSetAnalogGain(h_camera, 63);
// 使用预设LUT表 // 使用预设LUT表
CameraSetLutMode(h_camera, LUTMODE_PRESET); CameraSetLutMode(h_camera, LUTMODE_PRESET);
}
else if(mode == 1){
// 使用自动曝光
CameraSetAeState(h_camera, true);
// 抗频闪
// CameraSetAntiFlick(h_camera, true);
}
/*让SDK进入工作模式开始接收来自相机发送的图像 /*让SDK进入工作模式开始接收来自相机发送的图像
数据。如果当前相机是触发模式,则需要接收到 数据。如果当前相机是触发模式,则需要接收到