/* * ==================================================== * 功能: * 作者:何承洁 * 生成时间:2023/12/13 * 最近修改时间:2023/12/13 v3.0 * 版本号:v3.0 * ==================================================== */ #ifndef LINE_CONTINUITY_AND_RGB_DETECTION_H #define LINE_CONTINUITY_AND_RGB_DETECTION_H #include #include #include #include #include #include class LineContinuityAndRGBDetection { public: LineContinuityAndRGBDetection(); static int isContinuous(const cv::Mat& image); static int RGB_Judge(const cv::Mat& image); private: /// /// 获取连通区域轮廓 /// /// 源图像 /// 结果轮廓集 /// 轮廓集的排序关系。与contours的数量对应,受retr选项不同,排序会有变化 /// 轮廓集排序方式,默认为链式排序 /// 查找算法选择,默认为普通查找 /// 查找起始点,默认为(0,0)点 static void myFindContours(const cv::Mat& src, std::vector>& contours, std::vector& hierarchy, int retr = cv::RETR_LIST, int method = cv::CHAIN_APPROX_SIMPLE, cv::Point offset = cv::Point(0, 0)); /// /// 过滤连通区域轮廓,获取交叉线 /// /// 两交叉线距离交点相差距离,默认100,超过100,则认为断线 static int filterBlock(const std::vector>& contours, const std::vector& hierarchy, const cv::Size& imageSize, double distance = 100); static cv::RotatedRect getBoundingRect(const std::vector& contour); static double getDistance(cv::Point pointO, cv::Point pointA); static cv::Point2f getCrossPoint(cv::Vec4i LineA, cv::Vec4i LineB); }; #endif //LINE_CONTINUITY_AND_RGB_DETECTION_H