12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #pragma once
- #include <opencv.hpp>
- #include "data_def_api.h"
- #include "data_def.h"
- #include "logger.h"
- #include "tea_detect.h"
- #include "imstorage_manager.h"
- using namespace cv;
- namespace graft_cv{
- class CTeaSort{
- public:
- CTeaSort(
- ConfigParam& ap,
- img_type dtype,
- CGcvLogger*pLog = 0
- );
- ~CTeaSort();
- int detect(
- ImgInfo*, PositionInfo& posinfo, const char* fn = 0);
-
- int load_data(
- ImgInfo*imginfo,
- const char* fn = 0);
- int load_model();
- void set_image_saver(CImStoreManager** ppis) { m_ppImgSaver = ppis; }
- private:
- img_type m_dtype; // data type: tea_grab, tea_cut
- string m_imgId;
- string m_dtype_str;
- Mat m_raw_img;
- ConfigParam& m_cp;
- RetinaDrop m_drop_detector;
- CImStoreManager** m_ppImgSaver;
- CGcvLogger* m_pLogger;
- ImgInfo* m_pImginfoRaw;
- ImgInfo* m_pImginfoDetected;
- int generate_detect_windows(vector<Rect>&boxes);
- int detect_impl(cv::Mat& img, vector<Rect>&drop_regions, vector<Bbox> &droplets_raw);
- void clear_imginfo();
- double calculate_angle(Bbox&b, /*bool need_precise_angle,*/ double& grab_x, double&grab_y);
- void calculate_stem_grab_position(Bbox&b, double& grab_x, double&grab_y, double& grab_angle);
- void calculate_stem_grab_position_opt(Bbox&b, double& grab_x, double&grab_y, double& grab_angle);
- void calculate_stem_cut_position_opt(Bbox&b, double& grab_x, double&grab_y, double& grab_angle);
- //thinning
- void thinningIteration(cv::Mat& img, int iter);
- void thinning(const cv::Mat& src, cv::Mat& dst);
- //find grab position
- double get_grab_position(const cv::Mat& skele_img, cv::Point&vertex, double ref_angle);
- void calc_bottom_vertex(cv::Point&vertex, double ref_angle, double delta_angle, double radius, cv::Point&bpt0, cv::Point&bpt1);
- //bool poly_fit_cv(std::vector<cv::Point>& key_point, int n, cv::Mat& A);
- //double calc_fit_y(double x,cv::Mat& A);
- void line_fit(std::vector<cv::Point>& key_point, cv::Vec4f& lines);
- /**
- 计算 [-pi,pi]间的两个角间的夹角
- */
- double intersection_angle(double ref_angle, double angle_to_p3);
- };
- };
|