Auto Aim
This commit is contained in:
@@ -11,7 +11,7 @@ using std::vector;
|
||||
void Energy::StructingElementClose(cv::Mat &src){
|
||||
if (src.empty())return;
|
||||
//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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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 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){
|
||||
// cout<<cur_rect.center;
|
||||
|
||||
@@ -13,16 +13,16 @@ void Energy::initEnergyPartParam() {
|
||||
energy_part_param_.RPM = 10;
|
||||
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_.FAN_GRAY_THRESH = 75;
|
||||
energy_part_param_.ARMOR_GRAY_THRESH = 80;
|
||||
|
||||
energy_part_param_.FAN_CONTOUR_AREA_MAX = 17000;
|
||||
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_WIDTH_MIN = 40;
|
||||
energy_part_param_.FAN_CONTOUR_WIDTH_MIN = 35;
|
||||
energy_part_param_.FAN_CONTOUR_WIDTH_MAX = 60;
|
||||
energy_part_param_.FAN_CONTOUR_HW_RATIO_MAX = 4;
|
||||
energy_part_param_.FAN_CONTOUR_HW_RATIO_MIN = 1;
|
||||
|
||||
@@ -12,7 +12,7 @@ extern float curr_yaw, curr_pitch, mark_yaw, mark_pitch;
|
||||
extern int mark;
|
||||
|
||||
int Energy::run(cv::Mat &src){
|
||||
// imshow("src",src);
|
||||
imshow("src",src);
|
||||
fans.clear();
|
||||
armors.clear();
|
||||
fanPosition.clear();
|
||||
@@ -25,11 +25,11 @@ int Energy::run(cv::Mat &src){
|
||||
// if(first_armor_centers.size()>200)first_armor_centers.clear();
|
||||
// cout<<"first_armor_centers.size(): "<<first_armor_centers.size()<<endl;
|
||||
|
||||
imagePreprocess(src);
|
||||
// imagePreprocess(src);
|
||||
// imshow("img_preprocess",src);
|
||||
|
||||
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);
|
||||
@@ -51,8 +51,8 @@ int Energy::run(cv::Mat &src){
|
||||
cout<<"all_armor_centers.size(): "<<all_armor_centers.size()<<endl;
|
||||
cycleLeastFit();
|
||||
|
||||
// cycle_center = cv::Point(212,246);
|
||||
// radius = 123.942;
|
||||
cycle_center = cv::Point(321,319);
|
||||
radius = 109.178;
|
||||
attack_distance = ATTACK_DISTANCE * 123.323 / radius;
|
||||
|
||||
getFanPosition(fanPosition, fans, cycle_center, radius);
|
||||
|
||||
12
main.cpp
12
main.cpp
@@ -51,13 +51,13 @@ int main(int argc, char *argv[])
|
||||
WrapperHead *video_armor;
|
||||
WrapperHead *video_energy;
|
||||
if(from_camera) {
|
||||
video_armor = new CameraWrapper("armor");
|
||||
video_energy = new CameraWrapper("energy");
|
||||
// video_armor = new CameraWrapper();
|
||||
video_energy = new CameraWrapper();
|
||||
}else {
|
||||
video_armor = 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;
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ int main(int argc, char *argv[])
|
||||
energy.setAllyColor(ally_color);
|
||||
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) {
|
||||
imshow("enery src", energy_src);
|
||||
@@ -90,7 +90,7 @@ int main(int argc, char *argv[])
|
||||
break;
|
||||
}
|
||||
}
|
||||
delete video_energy, video_armor;
|
||||
delete video_energy;
|
||||
cout << "Program fails. Restarting" << endl;
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ void uartReceive(Uart* uart){
|
||||
}
|
||||
memcpy(&curr_yaw, buffer, 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(mark == 0){
|
||||
mark = 1;
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
class CameraWrapper: public WrapperHead {
|
||||
private:
|
||||
const std::string name;
|
||||
int mode;
|
||||
|
||||
unsigned char* rgb_buffer;
|
||||
int camera_cnts;
|
||||
@@ -37,6 +38,9 @@ private:
|
||||
public:
|
||||
CameraWrapper();
|
||||
CameraWrapper(const std::string &n);
|
||||
CameraWrapper(int camera_mode);
|
||||
CameraWrapper(const std::string &n,int camera_mode);
|
||||
|
||||
~CameraWrapper() final;
|
||||
|
||||
bool init() final;
|
||||
|
||||
@@ -9,16 +9,36 @@ using std::cout;
|
||||
using std::endl;
|
||||
using namespace cv;
|
||||
|
||||
CameraWrapper::CameraWrapper(const std::string &n):
|
||||
name(n),
|
||||
camera_cnts(2),
|
||||
camera_status(-1),
|
||||
iplImage(nullptr),
|
||||
channel(3){
|
||||
}
|
||||
|
||||
CameraWrapper::CameraWrapper():
|
||||
name("NULL"),
|
||||
mode(1),
|
||||
camera_cnts(2),
|
||||
camera_status(-1),
|
||||
iplImage(nullptr),
|
||||
channel(3){
|
||||
}
|
||||
|
||||
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"),
|
||||
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_status(-1),
|
||||
iplImage(nullptr),
|
||||
@@ -68,15 +88,22 @@ bool CameraWrapper::init() {
|
||||
|
||||
rgb_buffer = (unsigned char *)malloc(tCapability.sResolutionRange.iHeightMax *
|
||||
tCapability.sResolutionRange.iWidthMax * 3);
|
||||
|
||||
// 不使用自动曝光
|
||||
CameraSetAeState(h_camera, false);
|
||||
// 曝光时间10ms
|
||||
CameraSetExposureTime(h_camera, 10000);
|
||||
// 模拟增益4
|
||||
CameraSetAnalogGain(h_camera, 63);
|
||||
// 使用预设LUT表
|
||||
CameraSetLutMode(h_camera, LUTMODE_PRESET);
|
||||
if(mode == 0){
|
||||
// 不使用自动曝光
|
||||
CameraSetAeState(h_camera, false);
|
||||
// 曝光时间10ms
|
||||
CameraSetExposureTime(h_camera, 10000);
|
||||
// 模拟增益4
|
||||
CameraSetAnalogGain(h_camera, 63);
|
||||
// 使用预设LUT表
|
||||
CameraSetLutMode(h_camera, LUTMODE_PRESET);
|
||||
}
|
||||
else if(mode == 1){
|
||||
// 使用自动曝光
|
||||
CameraSetAeState(h_camera, true);
|
||||
// 抗频闪
|
||||
// CameraSetAntiFlick(h_camera, true);
|
||||
}
|
||||
|
||||
/*让SDK进入工作模式,开始接收来自相机发送的图像
|
||||
数据。如果当前相机是触发模式,则需要接收到
|
||||
|
||||
Reference in New Issue
Block a user