1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #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;
- void img_rgb2bgr(cv::Mat&img);
- 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, double& grab_x, double&grab_y);
-
- //// --- disused
- //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);
- //// --- disused
- //void distance_thinning(const cv::Mat& src, cv::Mat& dst);
- void part_thinning(const cv::Mat& src, cv::Mat& dst);
- //find grab position
- double get_grab_position(const std::vector<cv::Point2f>& inner_pixels,
- 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);
-
- //// --- disused
- //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::Point2f>& key_point, cv::Vec4f& lines);
- /**
- 计算 [-pi,pi]间的两个角间的夹角
- */
- double intersection_angle(double ref_angle, double angle_to_p3);
- };
- };
|