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
|