newtx/imgproc/algs/ImageProcess_Public.h

148 lines
6.1 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.

/*
* ====================================================
* <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