// demo.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include #include #include #include #include #include #include #include #include "utils.h" #include "config.h" #include "data_def.h" #include "optimal_angle.h" #include "cut_point_sc.h" #include "cut_point_rs.h" #include "graft_cv_api.h" #include "logger.h" using namespace cv; using namespace graft_cv; ofstream logger_ofs; CGcvLogger g_logger = CGcvLogger( logger_ofs, CGcvLogger::file_and_terminal, CGcvLogger::info, "D:\\logs\\gcv.log"); void test_init_cp(ConfigParam&cp){ cp.image_show=true;// cp.image_return=true;// cp.image_row_grid=20; cp.image_col_grid=100; cp.timeout_append=100; cp.timeout_proc=500; cp.self_camera=true; cp.image_save=true; cp.image_depository="D:\\logs\\img_depo"; cp.image_backup_days=7; cp.oa_y_flip=true; cp.oa_morph_radius = 1; cp.oa_morph_iteration=2; cp.oa_min_hist_value=10; cp.oa_morph_radius_base = 1; cp.oa_morph_iteration_base=2; cp.oa_min_hist_value_base=10; cp.oa_col_th_ratio=0.7; cp.oa_row_th_ratio=1.2; cp.oa_stem_x_padding=100; cp.oa_stem_dia_min=10; cp.oa_stem_fork_y_min=10; cp.oa_stem_dia_mp=0.9; cp.oa_clip_y_min=245; cp.oa_clip_y_max = 355; cp.rs_y_flip=false; cp.rs_col_th_ratio= 0.7; cp.rs_row_th_ratio= 1.15; cp.rs_stem_x_padding= 40; cp.rs_stem_dia_min=12; cp.rs_stem_fork_y_min=10; cp.rs_stem_dia_mp=0.98; cp.rs_stem_edge_detect_window=5; cp.rs_morph_radius=1; cp.rs_morph_iteration=2; cp.rs_morph_iteration_gray=5; cp.rs_max_corner_num=500; cp.rs_corner_qaulity_level= 0.1; cp.rs_corner_min_distance= 10; cp.rs_cand_corner_box_width_ratio=3.0; cp.rs_cand_corner_box_xoffset_ratio=0.75; cp.rs_opt_corner_xoffset_ratio = 0.2; cp.rs_opt_corner_yoffset_ratio = -0.5; cp.rs_corner_mask_rad_ratio=0.25; cp.rs_cut_angle=-45; cp.sc_y_flip=false; cp.sc_col_th_ratio=0.7; cp.sc_row_th_ratio=2.5; //2-3.0 cp.sc_stem_x_padding=50; cp.sc_stem_dia_min=3; cp.sc_clip_padding=5; cp.sc_stem_ymax_padding=50; cp.sc_default_cut_length=20; cp.sc_stem_edge_detect_window=5; cp.sc_r2_th=1.05; cp.sc_r2_window=10; cp.sc_average_window=10; cp.sc_morph_radius=1; cp.sc_morph_iteration=2; cp.rs_oa_pixel_ratio=1.0; cp.rs_cut_pixel_ratio=1.0; cp.sc_cut_pixel_ratio=1.0; } void test_imginfo2mat() { int t=0; ImgInfo* ii = new ImgInfo(); ii->angle=0; ii->width = ii->height = 13; ii->data = new graft_cv::byte[ii->width*ii->height]; for (int i=0;iheight;++i){ for (int j=0;jwidth;++j){ if (i==j || i+j==ii->width-1){ ii->data[i*ii->width+j]=255; } else{ ii->data[i*ii->width+j]=0; } } } Mat img = imginfo2mat(ii); /*namedWindow("3_3", 0); imshow("3_3", img); waitKey(1); destroyAllWindows();*/ delete [] ii->data; delete ii; }; void test_camconfig_write() { ConfigParam cp0, cp1; memset(&cp1, 0, sizeof(ConfigParam)); cp0 = cp1; CGCvConfig cam0 = CGCvConfig(); CGCvConfig cam1 = CGCvConfig(); cam0.setConfParam(&cp0); cam1.setConfParam(&cp1); FileStorage fs("cam_config.yml", FileStorage::WRITE); fs<<"conf_parameters"; fs<>& data){ string ifile = "E:\\projects\\grafting_robots\\py_code\\test.txt"; ifstream ifs(ifile.c_str(), ifstream::in ); data.clear(); if( ifs.is_open()){ string line; map tmp; while(getline(ifs,line)){ std::cout<(an,wi)); if(an==180){ data.push_back(tmp); } } } ifs.close(); } }; void test_anglefit() { ConfigParam cp; COptimalAnglePart opa = COptimalAnglePart(cp); vector> data; //test_anglefit_readdata(data); maptmp; /*tmp.insert(make_pair(0,216)); tmp.insert(make_pair(30,189)); tmp.insert(make_pair(60,112)); tmp.insert(make_pair(90,151)); tmp.insert(make_pair(120,188));*/ tmp.insert(make_pair(0,315)); tmp.insert(make_pair(30,270)); tmp.insert(make_pair(60,218)); tmp.insert(make_pair(90,141)); tmp.insert(make_pair(120,127)); data.push_back(tmp); for(vector>::iterator it = data.begin(); it!=data.end(); ++it){ map& an2width = *it; double oa = opa.angle_fit(an2width); cout<filenames; ConfigParam cp; test_init_cp(cp); /*cp.oa_min_hist_value=10; cp.oa_morph_iteration=2; cp.oa_morph_radius = 1;*/ COptimalAngle opa(cp); for(int i = 1;i<=5;++i){ for(int j = 0;j<=1;++j){ ostringstream ostr; ostr<=200){ an-=200; } Mat img = imread(filenames[idx], cv::IMREAD_GRAYSCALE); ImgInfo* imginfo = mat2imginfo(img); imginfo->angle = an; int obj_width=0; try{ t0 = clock(); obj_width = opa.append(imginfo,posinfo); t0 = clock() - t0; imginfo_release(&imginfo); } catch(int i) { cout<<"i= "<filenames; ConfigParam cp; test_init_cp(cp); cp.image_return=true; cp.image_show=true; cp.oa_y_flip=false; cp.oa_clip_y_min=750; COptimalAnglePart opa(cp,&g_logger); for(int i = 1;i<=1;++i){ //for(int j = 0;j<=1;++j){ ostringstream ostr; ostr<=200){ an-=200; } Mat img = imread(filenames[idx], cv::IMREAD_GRAYSCALE); //Rect rect(Point(0,0),Point(img_.cols,cp.oa_clip_y_min)); //Mat img = img_(rect); ImgInfo* imginfo = mat2imginfo(img); imginfo->angle = an; int obj_width=0; try{ memset(&posinfo,0,sizeof(PositionInfo)); t0 = clock(); obj_width = opa.append(imginfo,posinfo); t0 = clock() - t0; imginfo_release(&imginfo); } catch(int i) { cout<<"i= "<>data; std::vector answer; if(ifs.is_open()){ string line; std::maptmp; while(!ifs.eof()){ getline(ifs, line); //cout<(an,wi)); } } } ifs.close(); } //calculate ConfigParam cp; test_init_cp(cp); cp.image_return=true; cp.image_show=true; COptimalAnglePart opa(cp); for(size_t i=0;i< data.size();++i){ cout<<"optimal angle: "< impl_data; int impl_an = start_angle; if (impl_an==80 && data[i][impl_an]==277) { cout<<"debug"<110){break;} if(impl_an>180){break;} impl_data.insert(make_pair(impl_an,data[i][impl_an])); cout< d; d.insert(make_pair(0,167)); d.insert(make_pair(30,126)); d.insert(make_pair(60,202)); d.insert(make_pair(90,193)); d.insert(make_pair(120,121)); double a = opa->angle_fit(d); cout<<"angle: "<filenames; cv::glob(src_folder, filenames); ConfigParam cp; test_init_cp(cp); /* //cp.sc_col_th_ratio=0.7;// = 0.7, scion binary image column histogram, threshold ratio for max-value, for // // detect stem x-range // cp.sc_row_th_ratio=1.2; // = 1.2, row histogram of stem x-range subimage, stem diameter ratio for detect // // stem fork position // cp.sc_stem_x_padding=50; // = 50; // cp.sc_stem_dia_min=20; //=20, // cp.sc_stem_dia_max=60; //=60, // cp.sc_stem_fork_y_min=80;//=80, cut slop length, jump this range for seaching stem fork position // cp.sc_fork_down=10; // stem fork down X pixels, below this line to calculate r2 ratio // cp.sc_r2_th=1.05; //threshold for r2 ratio // cp.sc_r2_window=5; //= 5; the radius for calculate r2 index // cp.sc_average_window=10;// =10; //cp.sc_morph_radius=1;//scion, open-operation morph-size, = 1;-->COptimalAngle::imgproc(Mat& img) // cp.sc_morph_iteration=2; // // */ PositionInfo posinfo; CScionCutPoint scp(cp); //namedWindow("pic", WINDOW_NORMAL); ofstream g_logger_ofs; CGcvLogger g_logger = CGcvLogger( g_logger_ofs, CGcvLogger::file_and_terminal, CGcvLogger::warning, "./gcv_debug.log"); clock_t t; for(size_t idx=0; idxfilenames; cv::glob(src_folder, filenames); ConfigParam cp; test_init_cp(cp); cp.image_return=true; cp.image_show=true; cp.rs_y_flip=false; cp.self_camera=false; PositionInfo posinfo; memset(&posinfo,0,sizeof(PositionInfo)); CScionCutPoint scp(cp,&g_logger); //namedWindow("pic", WINDOW_NORMAL); /*ofstream g_logger_ofs; Logger g_logger = Logger( g_logger_ofs, Logger::file_and_terminal, Logger::warning, "./gcv_debug.log");*/ clock_t t; for(size_t idx=0; idxfilenames; cv::glob(src_folder, filenames); clock_t t; for(int i=0;ifilenames; // cv::glob(src_folder, filenames); // // clock_t t; // for(int i=0;ifilenames; cv::glob(work_folder, filenames); for(size_t i=0;ifilenames; cv::glob(work_folder, filenames); for(size_t idx=0; idxfilenames; cv::glob(work_folder, filenames); int cnter=0; for(size_t idx=0; idx sub_path; sub_path.push_back("20220119133425"); sub_path.push_back("20220119134921"); sub_path.push_back("20220119135818"); sub_path.push_back("20220119140720"); sub_path.push_back("20220119141511"); sub_path.push_back("20220119142616"); sub_path.push_back("20220119143048"); //vectorfilenames; //cv::glob(work_folder, filenames); vector fileidx; fileidx.push_back("3.bmp"); fileidx.push_back("11.bmp"); fileidx.push_back("19.bmp"); fileidx.push_back("27.bmp"); fileidx.push_back("35.bmp"); fileidx.push_back("43.bmp"); fileidx.push_back("51.bmp"); fileidx.push_back("59.bmp"); fileidx.push_back("67.bmp"); fileidx.push_back("75.bmp"); fileidx.push_back("83.bmp"); fileidx.push_back("91.bmp"); fileidx.push_back("99.bmp"); fileidx.push_back("107.bmp"); fileidx.push_back("115.bmp"); fileidx.push_back("123.bmp"); for(size_t idx=0; idxfilenames; cv::glob(work_folder, filenames); for(size_t idx=0; idxangle = j*30; try{ rs_oa_init(); rs_oa_append(imginfo, posinfo); for (int i =0;i<5;++i){ if (!posinfo.pp_images[i]){continue;} Mat tmp_img = imginfo2mat(posinfo.pp_images[i]); /*imshow("pic", tmp_img); waitKey(-1);*/ stringstream bbu; bbu<angle = j*30; try{ rs_oa_append(imginfo, posinfo); } catch(...){ std::cout<<"some error ..."<