code_device/hgdriver/ImageProcess/CISTestImageProcess.h

72 lines
2.7 KiB
C
Raw Normal View History

2022-12-28 01:56:54 +00:00
#ifndef CIS_TEST_IMAGE_PROCESS_H
#define CIS_TEST_IMAGE_PROCESS_H
#include <opencv2/opencv.hpp>
class CISTestImageProcess
{
public:
struct CISTestResult
{
double scaleXY1; //Բ1<D4B2><31><EFBFBD>ݱ<EFBFBD>
double scaleXY2; //Բ2<D4B2><32><EFBFBD>ݱ<EFBFBD>
double scaleXY3; //Բ3<D4B2><33><EFBFBD>ݱ<EFBFBD>
uchar colorBlock1[3]; //<2F><>ɫɫ<C9AB><C9AB>1RGB
uchar colorBlock2[3]; //<2F><>ɫɫ<C9AB><C9AB>2RGB
uchar colorBlock3[3]; //<2F><>ɫɫ<C9AB><C9AB>3RGB
uchar colorBlock4[3]; //<2F><>ɫɫ<C9AB><C9AB>4RGB
uchar colorBlock5[3]; //<2F><>ɫɫ<C9AB><C9AB>5RGB
uchar colorBlock6[3]; //<2F><>ɫɫ<C9AB><C9AB>6RGB
uchar colorBlock7[3]; //<2F><>ɫɫ<C9AB><C9AB>7RGB
uchar colorBlock8[3]; //<2F><>ɫɫ<C9AB><C9AB>8RGB
uchar colorBlock9[3]; //<2F><>ɫɫ<C9AB><C9AB>9RGB
uchar grayBlock1; //<2F>Ҷ<EFBFBD>ɫ<EFBFBD><C9AB>1<EFBFBD>Ҷ<EFBFBD>ֵ
uchar grayBlock2; //<2F>Ҷ<EFBFBD>ɫ<EFBFBD><C9AB>2<EFBFBD>Ҷ<EFBFBD>ֵ
uchar grayBlock3; //<2F>Ҷ<EFBFBD>ɫ<EFBFBD><C9AB>3<EFBFBD>Ҷ<EFBFBD>ֵ
uchar grayBlock4; //<2F>Ҷ<EFBFBD>ɫ<EFBFBD><C9AB>4<EFBFBD>Ҷ<EFBFBD>ֵ
uchar grayBlock5; //<2F>Ҷ<EFBFBD>ɫ<EFBFBD><C9AB>5<EFBFBD>Ҷ<EFBFBD>ֵ
uchar grayBlock6; //<2F>Ҷ<EFBFBD>ɫ<EFBFBD><C9AB>6<EFBFBD>Ҷ<EFBFBD>ֵ
uchar grayBlock7; //<2F>Ҷ<EFBFBD>ɫ<EFBFBD><C9AB>7<EFBFBD>Ҷ<EFBFBD>ֵ
uchar grayBlock8; //<2F>Ҷ<EFBFBD>ɫ<EFBFBD><C9AB>8<EFBFBD>Ҷ<EFBFBD>ֵ
uchar grayBlock9; //<2F>Ҷ<EFBFBD>ɫ<EFBFBD><C9AB>9<EFBFBD>Ҷ<EFBFBD>ֵ
};
static int test(const cv::Mat& image, CISTestResult& result);
private:
CISTestImageProcess();
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="src">Դͼ<D4B4><CDBC></param>
/// <param name="contours"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="hierarchy"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>contours<72><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>retrѡ<72>ͬ<EEB2BB><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б仯</param>
/// <param name="retr"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>Ĭ<EFBFBD><C4AC>Ϊ<EFBFBD><CEAA>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD></param>
/// <param name="method"><3E><><EFBFBD><EFBFBD><EFBFBD>ѡ<E3B7A8><D1A1><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>Ϊ<EFBFBD><CEAA>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD></param>
/// <param name="offset"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>㣬Ĭ<E3A3AC><C4AC>Ϊ<EFBFBD><CEAA>0,0<><30><EFBFBD><EFBFBD></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));
2022-12-30 09:54:27 +00:00
static void convexHull(const std::vector<cv::Point>& src, std::vector<cv::Point>& dst, bool clockwise = false);
2022-12-28 01:56:54 +00:00
/// <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);
2022-12-30 09:54:27 +00:00
static int findEllipse(const cv::Mat& image, double& scale_xy, double areaThre = 100 * 100);
2022-12-28 01:56:54 +00:00
};
#endif