g1g2hardwarechecker/Scanner/LineContinuityAndRGBDetecti...

54 lines
2.1 KiB
C
Raw Normal View History

2024-01-08 10:06:47 +00:00
/*
* ====================================================
*
*
* 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 <opencv2/opencv.hpp>
#include <memory>
#include <vector>
#include <opencv2/core/core_c.h>
#include <opencv2/core/types_c.h>
#include <opencv2/imgproc/imgproc_c.h>
class LineContinuityAndRGBDetection
{
public:
LineContinuityAndRGBDetection();
static int isContinuous(const cv::Mat& image);
static int RGB_Judge(const cv::Mat& image);
private:
/// <summary>
/// 获取连通区域轮廓
/// </summary>
/// <param name="src">源图像</param>
/// <param name="contours">结果轮廓集</param>
/// <param name="hierarchy">轮廓集的排序关系。与contours的数量对应受retr选项不同排序会有变化</param>
/// <param name="retr">轮廓集排序方式,默认为链式排序</param>
/// <param name="method">查找算法选择,默认为普通查找</param>
/// <param name="offset">查找起始点默认为0,0点</param>
static void myFindContours(const cv::Mat& src, std::vector<std::vector<cv::Point>>& contours, std::vector<cv::Vec4i>& hierarchy,
int retr = cv::RETR_LIST, int method = cv::CHAIN_APPROX_SIMPLE, cv::Point offset = cv::Point(0, 0));
/// <summary>
/// 过滤连通区域轮廓,获取交叉线
/// </summary>
/// <param name="distance">两交叉线距离交点相差距离默认100超过100则认为断线</param>
static int filterBlock(const std::vector<std::vector<cv::Point>>& contours, const std::vector<cv::Vec4i>& hierarchy, const cv::Size& imageSize, double distance = 100);
static cv::RotatedRect getBoundingRect(const std::vector<cv::Point>& 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