1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #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, double& grab_x, double&grab_y);
- void calculate_stem_grab_position(Bbox&b, double& grab_x, double&grab_y);
- //thinning
- void thinningIteration(cv::Mat& img, int iter);
- void thinning(const cv::Mat& src, cv::Mat& dst);
- //find grab position
- void get_grab_position(const cv::Mat& skele_img, cv::Point&vertex, double&ref_angle);
- void calc_bottom_vertex(cv::Point&vertex, double&ref_angle, cv::Point&bpt0, cv::Point&bpt1);
- bool poly_fit_cv(std::vector<cv::Point>& key_point, int n, cv::Mat& A);
- double CTeaSort::calc_fit_y(double x,cv::Mat& A);
- };
- };
|