148 lines
6.1 KiB
C++
148 lines
6.1 KiB
C++
/*
|
||
* ====================================================
|
||
|
||
* <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>㷨<EFBFBD><E3B7A8><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>ܿ<EFBFBD><DCBF>ܻ<EFBFBD><DCBB><EFBFBD>ImageProcess<73><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>෴<EFBFBD><E0B7B4>ʹ<EFBFBD><CAB9>
|
||
* <20><><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>ά
|
||
* <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣺2020/4/21
|
||
* <20><><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣺2020/4/21
|
||
* 2021/07/12 v1.1 getBoundingRect<63>У<EFBFBD><D0A3><EFBFBD><EFBFBD>ӿ<EFBFBD><D3BF>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD>ʼ angle > 90 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
* 2021/07/22 v1.2 convexHull<6C>У<EFBFBD><D0A3><EFBFBD><DEB8>㼯Ϊ<E3BCAF>տ<EFBFBD><D5BF>ܵ<EFBFBD><DCB5>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD>BUG<55><47>
|
||
* 2023/11/02 v1.3 threshold_Mat,<2C><>thre<0ʱ<30><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||
* 2023/12/01 v1.4 <20><><EFBFBD><EFBFBD>getBackGroundColor<6F>㷨<EFBFBD><E3B7A8>
|
||
* 2023/12/02 v1.4.1 getBackGroundColor<6F><72><EFBFBD><EFBFBD>threshold<6C><64>ֵ<EFBFBD><D6B5>
|
||
* 2023/12/04 v1.4.2 <20><><EFBFBD><EFBFBD>opencv<63>汾<EFBFBD>ӿڡ<D3BF>
|
||
* 2023/12/05 v1.4.3 getBackGroundColor֧<72>ֵ<EFBFBD>ͨ<EFBFBD><CDA8>ͼ<EFBFBD><EFBFBD>ɫʶ<C9AB><CAB6>
|
||
* <20>汾<EFBFBD>ţ<EFBFBD>v1.4.3
|
||
|
||
* ====================================================
|
||
*/
|
||
|
||
#ifndef IMAGE_PROCESS_PUBLIC_H
|
||
#define IMAGE_PROCESS_PUBLIC_H
|
||
|
||
#include "opencv2/opencv.hpp"
|
||
#include <vector>
|
||
|
||
namespace hg
|
||
{
|
||
/*
|
||
* <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD>㼯<EFBFBD><E3BCAF><EFBFBD><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㼯
|
||
* src: Դ<>㼯
|
||
* dst: Ŀ<><C4BF>㼯
|
||
* clockwise: trueΪ˳ʱ<CBB3><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>falseΪ<65><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
*/
|
||
void convexHull(const std::vector<cv::Point>& src, std::vector<cv::Point>& dst, bool clockwise = false);
|
||
|
||
/*
|
||
* <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><CDB9><EFBFBD><EFBFBD>Σ<EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>ɫΪ<C9AB><CEAA>ɫ
|
||
* image: <20><><EFBFBD>ͼ<EFBFBD><CDBC>
|
||
* points: <><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㼯<EFBFBD><E3BCAF><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
*/
|
||
void fillConvexHull(cv::Mat& image, const std::vector<cv::Point>& points);
|
||
|
||
/*
|
||
* <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>䰼<EFBFBD><E4B0BC><EFBFBD><EFBFBD><EFBFBD>
|
||
* image: <20><><EFBFBD>ͼ<EFBFBD><CDBC>
|
||
* contours: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㼯<EFBFBD><E3BCAF><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
* color: <20><><EFBFBD><EFBFBD><EFBFBD>ɫ
|
||
*/
|
||
void fillPolys(cv::Mat& image, const std::vector<std::vector<cv::Point>>& contours, const cv::Scalar& color);
|
||
|
||
/*
|
||
* <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>ȡ<EFBFBD><C8A1>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
* src: Դͼ<D4B4><CDBC>
|
||
* contours: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
* hierarchy: <20><><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>б仯
|
||
* retr: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>Ĭ<EFBFBD><C4AC>Ϊ<EFBFBD><CEAA>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
||
* method: <20><><EFBFBD><EFBFBD><EFBFBD>㷨ѡ<E3B7A8><D1A1>Ĭ<EFBFBD><C4AC>Ϊ<EFBFBD><CEAA>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>
|
||
* offset: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>㣬Ĭ<E3A3AC><C4AC>Ϊ<EFBFBD><CEAA>0,0<><30><EFBFBD><EFBFBD>
|
||
*/
|
||
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));
|
||
|
||
/// <summary>
|
||
/// <20><>ȡͼƬ<CDBC>ĸ<EFBFBD><C4B8>ɫ
|
||
/// </summary>
|
||
/// <param name="image">ͼ<><CDBC><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8></param>
|
||
/// <param name="mask"><3E><>Ĥ</param>
|
||
/// <param name="threshold"><3E><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD><C5B3><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD></param>
|
||
/// <returns><3E>ĸ<EFBFBD><C4B8>ɫ</returns>
|
||
cv::Scalar getBackGroundColor(const cv::Mat& image, const cv::Mat& mask = cv::Mat(), int threshold = 20);
|
||
|
||
/*
|
||
* <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ǵ㼯<C7B5><E3BCAF><EFBFBD><EFBFBD>С<EFBFBD><D0A1>Ӿ<EFBFBD><D3BE><EFBFBD>
|
||
* contour: <20>㼯
|
||
* <20><><EFBFBD><EFBFBD>ֵ: <20><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
|
||
*/
|
||
cv::RotatedRect getBoundingRect(const std::vector<cv::Point>& contour);
|
||
|
||
/*
|
||
* <20><><EFBFBD><EFBFBD>: <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
* contours: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ㼯<C9B5><E3BCAF>ɣ<EFBFBD>
|
||
* hierarchy: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE>Ĺ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>contours<72><73>Ӧ
|
||
* <20><><EFBFBD><EFBFBD>ֵ: <><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㼯
|
||
*/
|
||
std::vector<cv::Point> getMaxContour(const std::vector<std::vector<cv::Point>>& contours, const std::vector<cv::Vec4i>& hierarchy);
|
||
|
||
/*
|
||
* <20><><EFBFBD><EFBFBD>: <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
* contours: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ㼯<C9B5><E3BCAF>ɣ<EFBFBD>
|
||
* hierarchy: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE>Ĺ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>contours<72><73>Ӧ
|
||
* <20><><EFBFBD><EFBFBD>ֵ: <><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㼯
|
||
*/
|
||
std::vector<cv::Point> getVertices(const cv::RotatedRect& rect);
|
||
|
||
/*
|
||
* <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
* points: <20><><EFBFBD><EFBFBD><EFBFBD>㼯
|
||
* center: Χ<><CEA7>center<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
* indent: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
*/
|
||
void polyIndent(std::vector<cv::Point>& points, const cv::Point& center, int indent);
|
||
|
||
/*
|
||
* <20><><EFBFBD><EFBFBD>: <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD>ͻҶ<CDBB>ͼ<EFBFBD><CDBC>srcΪ<63><CEAA>ɫͼ<C9AB><CDBC>ʱ<EFBFBD><CAB1><EFBFBD>Ҷ<EFBFBD>ͼȡ<CDBC><C8A1><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||
* src: Դͼ
|
||
* dst: Ŀ<><C4BF>ͼ
|
||
* thre: <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>thre < 0ʱ<30><CAB1><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>ɫ<EFBFBD><C9AB>Ϊÿ<CEAA><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ֵ<EFBFBD><D6B5>
|
||
*/
|
||
void threshold_Mat(const cv::Mat& src, cv::Mat& dst, double thre);
|
||
|
||
/*
|
||
* <20><><EFBFBD><EFBFBD>: <20><>ɫת<C9AB>Ҷȣ<D2B6><C8A3>Ҷ<EFBFBD>ͼȡ<CDBC><C8A1><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||
* src: Դͼ
|
||
* <20><><EFBFBD><EFBFBD>ֵ: <20>Ҷ<EFBFBD>ͼ
|
||
*/
|
||
cv::Mat transforColor(const cv::Mat& src);
|
||
|
||
/*
|
||
* <20><><EFBFBD><EFBFBD>: <20><>ȡ<EFBFBD><C8A1>ķ<EFBFBD><C4B7><EFBFBD>任
|
||
* p: ԭ<><D4AD>
|
||
* warp_mat: <20><><EFBFBD><EFBFBD>任ϵ<E4BBBB><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
* <20><><EFBFBD><EFBFBD>ֵ: <20>任<EFBFBD><E4BBBB>ĵ<EFBFBD>
|
||
*/
|
||
cv::Point warpPoint(const cv::Point& p, const cv::Mat& warp_mat);
|
||
|
||
/*
|
||
* <20><><EFBFBD><EFBFBD>: <20>㵽<EFBFBD><E3B5BD><EFBFBD><EFBFBD><EFBFBD>
|
||
* p1: <20><>1
|
||
* p2: <20><>2
|
||
* <20><><EFBFBD><EFBFBD>ֵ: <20>㵽<EFBFBD><E3B5BD><EFBFBD><EFBFBD><EFBFBD>
|
||
*/
|
||
int distanceP2P(const cv::Point& p1, const cv::Point& p2);
|
||
|
||
/*
|
||
* <20><><EFBFBD><EFBFBD>: <20>㵽ֱ<E3B5BD>߾<EFBFBD><DFBE><EFBFBD>
|
||
* p: <20><>
|
||
* l1: ֱ<>߶˵<DFB6>1
|
||
* l2: ֱ<>߶˵<DFB6>2
|
||
* <20><><EFBFBD><EFBFBD>ֵ: <20>㵽ֱ<E3B5BD>߾<EFBFBD><DFBE><EFBFBD>
|
||
*/
|
||
float distanceP2L(const cv::Point& p, const cv::Point& l1, const cv::Point& l2);
|
||
|
||
void initLut(const std::string lutpath, bool iscolor);
|
||
void correctColor(cv::Mat& src, int dpi, int mode,bool isText);
|
||
}
|
||
|
||
#endif // !IMAGE_PROCESS_C_H
|