72 lines
2.7 KiB
C++
72 lines
2.7 KiB
C++
#ifndef CIS_TEST_IMAGE_PROCESS_H
|
||
#define CIS_TEST_IMAGE_PROCESS_H
|
||
|
||
#include <opencv2/opencv.hpp>
|
||
|
||
class CISTestImageProcess
|
||
{
|
||
public:
|
||
|
||
struct CISTestResult
|
||
{
|
||
double scaleXY1; //圆1横纵比
|
||
double scaleXY2; //圆2横纵比
|
||
double scaleXY3; //圆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();
|
||
|
||
/// <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 findContours(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));
|
||
|
||
static void convexHull(const std::vector<cv::Point>& src, std::vector<cv::Point>& dst, bool clockwise = false);
|
||
|
||
/// <summary>
|
||
///
|
||
/// </summary>
|
||
/// <param name="contours"></param>
|
||
/// <param name="hierarchy"></param>
|
||
/// <param name="paperRect"></param>
|
||
/// <returns></returns>
|
||
static int findPaperContour(const std::vector<std::vector<cv::Point>>& contours, const std::vector<cv::Vec4i>& hierarchy, cv::RotatedRect& paperRect);
|
||
|
||
static int classfiyContours(const std::vector<std::vector<cv::Point>>& contours, std::vector<std::vector<cv::Point>>& marks,
|
||
std::vector<std::vector<cv::Point>>& colorBlocks,
|
||
std::vector<std::vector<cv::Point>>& grayBlocks);
|
||
|
||
|
||
static int findEllipse(const cv::Mat& image, double& scale_xy, double areaThre = 100 * 100);
|
||
};
|
||
|
||
#endif |