code_device/hgdriver/ImageProcess/CISTestImageProcess.h

72 lines
2.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef CIS_TEST_IMAGE_PROCESS_H
#define CIS_TEST_IMAGE_PROCESS_H
#include <opencv2/opencv.hpp>
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();
/// <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