📄 image.h
字号:
// Image.h: interface for the CImage class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_IMAGE_H__592ED8F2_7604_4C30_A3AD_E5D235A43EB3__INCLUDED_)
#define AFX_IMAGE_H__592ED8F2_7604_4C30_A3AD_E5D235A43EB3__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "afxtempl.h"
#ifndef VLPCLASS
#define VLPCLASS __declspec(dllexport)
#endif
#ifndef VLPAPI
#define VLPAPI __declspec(dllexport)
#endif
#define WIDTHBYTES(i) (((i)+31)/32*4)
//插值方法
#define NEAREST 1
#define BILINEAR 2
#define BICUBIC 3
VLPAPI BOOL GetOvlap(CRect &rcOut,CRect rcIn1,CRect rcIn2);
VLPAPI CString GetIntToString(int *pIn,int Num);
VLPAPI void RunVLP();
VLPAPI int Max(int a, int b, int c);
VLPAPI int Min(int a, int b, int c);
class VLPCLASS CImage
{
public:
BOOL GetLiantong(CList<int,int> &ListNum,CList<CRect,CRect> &ListRect,CImage &ImgOut, BYTE byVal);
//初始化
CImage();
CImage(CImage &Source);
CImage& operator =(CImage &Source);
BOOL Create(CSize szImg,BOOL bRGB);
virtual BOOL Load(CString strPath);//从文件读取
BOOL Draw(CDC* pDC, CPoint origin, CSize size,BOOL bStretch=FALSE,BOOL bCentre=TRUE);//显示
void Detroy();
virtual ~CImage();
public://操作
//腐蚀
void Erosion(int nVal=255);
//膨胀
void Dilation();
BOOL Thinner(CImage &ImgOut);
BOOL Hough(CImage &ImgOut);
BOOL ModifyGTwo(CImage &ImgOut,CImage &ImgTwo,int dis);
//直方均衡
void HistogramEqualization();
//RGB转化为灰度图象,结果保存在ImgGray;
BOOL Rgb2Gray(CImage &ImgGray,double dR,double dG,double dB);
//CSize szGrid模板大小
BOOL MaxMinGrid(CImage &ImgOut,CSize szGrid,double * pPara);
BOOL MaxMinMinusGrid(CImage &ImgOut, CSize szGrid, double *pPara);
BOOL AvgGrid(CImage &ImgOut,CSize szGrid,double * pPara);
//以百分之多少作为域值,bReverse=FALSE时>dThreld*255时为255
BOOL Threold1(CImage &ImgOut, CImage &Template4, CImage &Template3, int pos1, int min,BOOL bReverse,double ratio);
BOOL Threthold(CImage &ImgOut,BYTE dThretd,BOOL bReverse=FALSE);
BOOL GetChePaiRect(CImage &ImgOut,CImage &ImgGray,CList<CRect,CRect>& rcChePaiList);
//从原图剪切出一个区域
BOOL CutFromImg(CImage &ImgOut,CRect rcImg);
//切割文字
BOOL CutText(CList<CImage,CImage &> &ImgOutList,BOOL bBlackText);
public: //属性
int GetWidth();
int GetHeight();
BOOL IsRGB();
public:
BOOL RectifyAB(CImage &ImgOut,double dA[2],double dB[2],BYTE byFill=255,CPoint ptOffset=CPoint(0,0),CImage * pImgOrg=NULL,BOOL bGray=TRUE);
BOOL Rotate(CImage& imOut,double beta,BYTE byFill);
BOOL CutTextByModel(CList<CImage,CImage&> &ListText);
CString GetColorType(BOOL &bBlackText);
int GetHVContinue(BYTE byTextVal,BOOL bVorH,int nStart1);
BOOL BmpDataToImg(BYTE *pData,int nSize,int nWidth,int nHeight);
BOOL GrayStretch(CImage &ImgOut,int pos,int min);
BOOL DeleteHV(CImage &ImgOut);
BOOL Rectify(CImage &ImgOut,double dA[2],double dB[2],BYTE byFill=255,CPoint ptOffset=CPoint(0,0),CImage * pImgOrg=NULL);
BOOL RectifyEx(CImage &ImgOut,int nLR[2],double dA[2],double dB[2],BYTE byFill,CPoint ptOffset,CImage * pImgOrg=NULL);
BOOL HVEdgeDetect(CImage &ImgH,CImage& ImgV,int nW=1);
int GetRingNum(CList<int,int> &ListNum,CList<CRect,CRect> &ListRect);
BOOL GetTextRect(CRect &rcText,BYTE byTextVal=0);
BOOL DenoiseMax();
BOOL Denoise(int nPix=8);
BOOL IsBlackText();
BOOL CutLeftAndRight(CImage &ImgOut);
//bVorH=TRUE时表示求竖直最大连续个数
BOOL Grad1(CImage &ImgOut);
BOOL GetMaxContinue(int *nMax, CRect rcSelect, BYTE byTextVal=0,BOOL bVorH=TRUE);
int GetAllTextPointNum(CRect rcNeed,BYTE byVal=0);
BOOL Filter(CImage &imgOut, int nNeighbor=4,BYTE nTextVal=0, BYTE nBGVal=255);
BOOL GetTextPointNum(int *nX, int *nY, CRect rcR, BYTE byTextVal);
BOOL GetTiaoBian(int *nTiaoBianX, int *nTiaoBianY,CRect rcR);
inline void MaxMin(int *pData,int nNum,int MaxMin[2],int nMaxMinNo[2]);
inline int Round(double dX);
void GetOutUpAndDown(int *nTop,int *nBottom,int nNum,int *nTopOut,int *nBottomOut,int nWidth);
void CutUpAndDown(int &nTop,int &nBottom);
BOOL GetAvgandS(int &nAvg,int &nS,CRect rcPos);
void Sort(int * pData,int nNum);
BOOL SaveBMP(CString strPath);
BOOL CulcuateInf(double &dH,double &dV,double &dL,double &dR,BYTE *pData,int nW,int nH,BYTE btVal=255);
//btVal表示有效值
BOOL EdgeDetect(BYTE btVal=255,int nType=4);
int GetMedianNum(int *bArray,int iFilterLen);
BOOL MedianFilter(CImage& ImgOut, int iFilterH, int iFilterW,int iFilterMX, int iFilterMY);
void ShowImg(HWND hWnd=NULL);
BOOL GetLineAB(CList<CPoint,CPoint> &ptList,double &dA,double &dB);
BOOL CalCulate(BYTE pHist[3][256],BYTE pMean[3],double pS[3],CRect * pRect=NULL);
BOOL GetExactText(CList<CImage,CImage&> &ImgList);
BOOL CutExact(CImage &ImgOut);
void CutOffUnUsedArea();
int GetConnectivity();
void Inverse();
int Label();
void Crop(CRect CropRect);
void Stretch(CSize Size,int nStretchType=NEAREST);
BOOL Stretch(BYTE nMax,BYTE nMin);
BOOL graytoTwo(CImage &ImgOut,CImage &Imgavg,CImage &ImagTh);
BOOL Grad(CImage &ImgOut);
BYTE * m_pR;//若是灰度图象则表示灰度
BYTE * m_pG;
BYTE * m_pB;
private://识别用
BOOL CalculateSame(int * nData,int nNum,CList<CPoint,CPoint> &ptList,CPoint &ptMax);
private:
int GetLevel(double dX,int nType);
void GetHistogram(int* piHistogram);
double GetSubPixel(double x, double y, int Method=NEAREST);
void * m_pShowDlg;
public:
BOOL Rgb2Yuv(CImage &ImgYuv);
BOOL CutLRByTiaoBian(int nLR[2],BOOL bBlack,int nH=-1);
BOOL GetLineAB(CList<CPoint,CPoint> &ptListUp,CList<CPoint,CPoint> &ptListDown,double dAvgH,double dA[],double dB[]);
BOOL GetABByLianTong(double dA[2], double dB[2]);//输入的二值化图象
BOOL GetABByTioaBian(double dA[2],double dB[2]); //输入的是灰度图象
BOOL DanziLeftAndRight(CImage &ImgOut);
void hanziCutUpAndDown(int &nTop, int &nBottom);
int GetPixNum(BYTE btVal,CRect rcCal);
BOOL imLTquzao(CList<CRect,CRect> &ListRect);
BOOL imGraytoTwo(CImage& ImgOut,BOOL m_bBlack);
BOOL DayorNight(CImage& ImgOut);
void imerode(int **se,int s_Height,int s_Width);
void imdilate(int **se,int s_Height,int s_Width);
// void imdilate();
int m_nHeight;
int m_nWidth;
int m_nPixelNum;
BOOL m_bRGB;
};
VLPAPI CString GetAppPath();
class VLPCLASS CRecProcess
{
public:
CRecProcess();
virtual ~CRecProcess();
BOOL Run(CString strPath,CString &strResult,BOOL bDebug=FALSE);
public:
BOOL Run(BYTE * pData,int nSize,int nW,int nH,char * cResult);
CImage GetOrgImg();
CImage GetVPImg();
CString GetRecResult();
private:
void* m_pProcess;
};
#endif // !defined(AFX_IMAGE_H__592ED8F2_7604_4C30_A3AD_E5D235A43EB3__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -