#ifndef CIS_TEST_IMAGE_PROCESS_H #define CIS_TEST_IMAGE_PROCESS_H #include class CISTestImageProcess { public: struct CISTestResult { double w; //圆横轴 double h; //圆纵轴 double scaleXY; //圆3横纵比 uchar colorBlock1[3]; //彩色色块1RGB uchar colorBlock2[3]; //彩色色块2RGB uchar colorBlock3[3]; //彩色色块3RGB uchar colorBlock4[3]; //彩色色块4RGB uchar colorBlock5[3]; //彩色色块5RGB uchar colorBlock6[3]; //彩色色块6RGB uchar colorBlock7[3]; //彩色色块7RGB uchar colorBlock8[3]; //彩色色块8RGB uchar colorBlock9[3]; //彩色色块9RGB uchar grayBlock1; //灰度色块1灰度值 uchar grayBlock2; //灰度色块2灰度值 uchar grayBlock3; //灰度色块3灰度值 uchar grayBlock4; //灰度色块4灰度值 uchar grayBlock5; //灰度色块5灰度值 uchar grayBlock6; //灰度色块6灰度值 uchar grayBlock7; //灰度色块7灰度值 uchar grayBlock8; //灰度色块8灰度值 uchar grayBlock9; //灰度色块9灰度值 }; static int test(const cv::Mat& image, CISTestResult& result); private: CISTestImageProcess(); /// /// 获取连通区域轮廓 /// /// 源图像 /// 结果轮廓集 /// 轮廓集的排序关系。与contours的数量对应,受retr选项不同,排序会有变化 /// 轮廓集排序方式,默认为链式排序 /// 查找算法选择,默认为普通查找 /// 查找起始点,默认为(0,0)点 static void findContours(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)); static void convexHull(const std::vector& src, std::vector& dst, bool clockwise = false); /// /// /// /// /// /// /// static int findPaperContour(const std::vector>& contours, const std::vector& hierarchy, cv::RotatedRect& paperRect); static int classfiyContours(const std::vector>& contours, std::vector>& marks, std::vector>& colorBlocks, std::vector>& grayBlocks); static int findEllipse(const cv::Mat& image, double& scale_xy, double areaThre = 100 * 100); }; #endif