change the parameters
This commit is contained in:
@@ -57,6 +57,7 @@ void Energy::ArmorStruct(cv::Mat &src) {
|
|||||||
// imshow("erode_2", src);
|
// imshow("erode_2", src);
|
||||||
erode(src,src, element_erode_3);
|
erode(src,src, element_erode_3);
|
||||||
// imshow("erode_3", src);
|
// imshow("erode_3", src);
|
||||||
|
|
||||||
// dilate(src, src, element_dilate_2);
|
// dilate(src, src, element_dilate_2);
|
||||||
// imshow("dilate_2", src);
|
// imshow("dilate_2", src);
|
||||||
// dilate(src, src, element_dilate_3);
|
// dilate(src, src, element_dilate_3);
|
||||||
|
|||||||
@@ -69,7 +69,8 @@ void Energy::initEnergy() {
|
|||||||
// 此函数对能量机关参数进行初始化
|
// 此函数对能量机关参数进行初始化
|
||||||
// ---------------------------------------------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------------------------------------------
|
||||||
void Energy::initEnergyPartParam() {
|
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_.GRAY_THRESH = 225;
|
||||||
gimbal_energy_part_param_.SPLIT_GRAY_THRESH = 230;
|
gimbal_energy_part_param_.SPLIT_GRAY_THRESH = 230;
|
||||||
gimbal_energy_part_param_.FAN_GRAY_THRESH = 75;
|
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_.GRAY_THRESH = 225;
|
||||||
chassis_energy_part_param_.SPLIT_GRAY_THRESH = 230;
|
chassis_energy_part_param_.SPLIT_GRAY_THRESH = 230;
|
||||||
chassis_energy_part_param_.FAN_GRAY_THRESH = 75;
|
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_AREA_MIN = 0;
|
||||||
chassis_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MIN = 55;
|
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_LENGTH_MAX = 95;
|
||||||
chassis_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MIN = 13;
|
chassis_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MIN = 8;
|
||||||
chassis_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MAX = 35;
|
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_MAX = 12;
|
||||||
// chassis_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MIN = 4;
|
// chassis_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MIN = 4;
|
||||||
chassis_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MIN = 2.7;
|
chassis_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MIN = 2.7;
|
||||||
|
|||||||
@@ -68,8 +68,6 @@ int Energy::findArmors(const cv::Mat src) {
|
|||||||
std::vector<vector<Point> > armor_contours_external;//用总轮廓减去外轮廓,只保留内轮廓,除去流动条的影响。
|
std::vector<vector<Point> > armor_contours_external;//用总轮廓减去外轮廓,只保留内轮廓,除去流动条的影响。
|
||||||
|
|
||||||
ArmorStruct(src_bin);//图像膨胀,防止图像断开并更方便寻找
|
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, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);
|
||||||
// findContours(src_bin, armor_contours_external, CV_RETR_EXTERNAL, 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;
|
// cout<<armors.size()<<endl;
|
||||||
// showArmors("armor",src);
|
// 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;
|
if (src.empty())return false;
|
||||||
static Mat src_bin;
|
static Mat src_bin;
|
||||||
static Mat src_copy;
|
static Mat src_copy;
|
||||||
@@ -228,7 +227,7 @@ bool Energy::findFlowStrip(const cv::Mat src) {
|
|||||||
// Size2f cur_size = cur_rect.size;
|
// Size2f cur_size = cur_rect.size;
|
||||||
// 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;
|
||||||
// if (length / width > 2 && width > 5) {
|
// if (length / width > 4 && width > 7 && width<30) {
|
||||||
// cout << cur_rect.center << endl;
|
// cout << cur_rect.center << endl;
|
||||||
// flow_strip = cv::minAreaRect(flow_strip_contour);
|
// flow_strip = cv::minAreaRect(flow_strip_contour);
|
||||||
// cout << "flow strip area: " << length << '\t' << width << endl;
|
// 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,
|
Point2f p2p(flow_strip.center.x - target_point.x,
|
||||||
flow_strip.center.y - target_point.y);
|
flow_strip.center.y - target_point.y);
|
||||||
p2p = p2p / pointDistance(flow_strip.center, target_point);//单位化
|
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);
|
Size2f(length * 1.4, length * 1.4), -90);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|||||||
@@ -16,11 +16,12 @@ void Energy::run(cv::Mat &gimbal_src, cv::Mat &chassis_src) {
|
|||||||
if (chassis_src.empty())
|
if (chassis_src.empty())
|
||||||
run(gimbal_src);//仅拥有云台摄像头则调用单摄像头的run函数
|
run(gimbal_src);//仅拥有云台摄像头则调用单摄像头的run函数
|
||||||
else if (is_gimbal) {
|
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();
|
clearAll();
|
||||||
initImage(gimbal_src);
|
initImage(gimbal_src);
|
||||||
// findFans(gimbal_src);
|
findFans(gimbal_src);
|
||||||
// showFans("fan",gimbal_src);
|
showFans("fan",gimbal_src);
|
||||||
|
|
||||||
if (findArmors(gimbal_src) < 1)return;
|
if (findArmors(gimbal_src) < 1)return;
|
||||||
if (show_energy)showArmors("armor", gimbal_src);
|
if (show_energy)showArmors("armor", gimbal_src);
|
||||||
@@ -36,6 +37,7 @@ void Energy::run(cv::Mat &gimbal_src, cv::Mat &chassis_src) {
|
|||||||
initEnergy();
|
initEnergy();
|
||||||
destroyAllWindows();
|
destroyAllWindows();
|
||||||
} else if (is_chassis) {
|
} else if (is_chassis) {
|
||||||
|
// energy_part_param_ = chassis_energy_part_param_;
|
||||||
energy_part_param_ = chassis_energy_part_param_;
|
energy_part_param_ = chassis_energy_part_param_;
|
||||||
clearAll();
|
clearAll();
|
||||||
initImage(chassis_src);
|
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 (findArmors(chassis_src) < 1)return;
|
||||||
if (show_energy)showArmors("armor", chassis_src);
|
if (show_energy)showArmors("armor", chassis_src);
|
||||||
if (!findFlowStripFan(chassis_src))return;
|
if (!findFlowStripFan(chassis_src)) return;
|
||||||
showFlowStripFan("flow strip fan", chassis_src);
|
|
||||||
if (!findTargetInFlowStripFan()) return;
|
if (!findTargetInFlowStripFan()) return;
|
||||||
if (!findCenterROI(chassis_src))return;
|
if (!findCenterROI(chassis_src))return;
|
||||||
if (show_energy)showFlowStripFan("strip", chassis_src);
|
if (show_energy)showFlowStripFan("strip", chassis_src);
|
||||||
|
|||||||
6
main.cpp
6
main.cpp
@@ -64,8 +64,10 @@ int main(int argc, char *argv[]) {
|
|||||||
video_gimbal = new CameraWrapper(0/*, "armor"*/);
|
video_gimbal = new CameraWrapper(0/*, "armor"*/);
|
||||||
video_chassis = new CameraWrapper(1/*, "energy"*/);
|
video_chassis = new CameraWrapper(1/*, "energy"*/);
|
||||||
} else {
|
} else {
|
||||||
video_gimbal = new VideoWrapper("/home/sun/项目/energy_video/148.avi");
|
// video_gimbal = new VideoWrapper("/home/sjturm/Desktop/videos/147.avi");
|
||||||
video_chassis = new VideoWrapper("/home/sun/项目/energy_video/148.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()) {
|
if (video_gimbal->init()) {
|
||||||
LOGM("video_gimbal source initialization successfully.");
|
LOGM("video_gimbal source initialization successfully.");
|
||||||
|
|||||||
Reference in New Issue
Block a user