#include "include.h" #include "../village_inc.h" #include "road_seg.h" #include using namespace std; struct RoadInfo{ std::vector vec_line; std::vector vec_road; std::vector vec_direct; }; class RoadSegAnalysis { public: RoadSegAnalysis(/* args */); ~RoadSegAnalysis(); int init(int devId, std::string sdk_root); std::vector detect(vector vec_img); int check_reverse_driving(std::vector& vec_direct, sy_rect rc, int src_width, int src_height, int head_or_tail); int check_cross_line(std::vector& vec_line, sy_rect rc, int src_width, int src_height); int check_cross_region(std::vector& vec_reg, sy_rect rc, int src_width, int src_height, int region_type); private: int release(); std::vector parse_line(rs_result one_result, sy_img src); RoadInfo parse_road(rs_result one_result, sy_img src); std::vector parse_direct(rs_result one_result, sy_img src); // void post_direct(rs_result one_result, sy_img src); cv::Mat mask_to_rgb(cv::Mat img, cv::Mat mask); float contourArea(std::vector contour, cv::Point2f& center); void lanes_process(const rs_lane* lanes, int lane_count, std::vector, int>>& combined, float scale_w = 1.0, float scale_h = 1.0); cv::Mat imshow_lanes(cv::Mat img, const rs_lane* lanes, int lane_count); int Mask2LanePoints(const cv::Mat& pred, std::vector>&lanes, std::vector& cats); cv::Mat seg_post_process(bool large_resolution, unsigned char *seg_array, std::vector, int>> combined, std::vector> &poly_masks, std::vector ®ion_classes, std::vector> &lanes, std::vector &cats, std::map &x_sort); cv::Mat direct_post_process(bool large_resolution, unsigned char *direct_array, std::vector> &poly_masks, std::vector ®ion_classes); private: void* m_handle{nullptr}; aclrtContext ctx{nullptr}; };