源代码链接
// Image.h: interface for the CImage class.
//
//
#if !defined(AFX_IMAGE_H__294B5F7A_8973_4F4D_9AB6_19EB14061FD4__INCLUDED_)
#define AFX_IMAGE_H__294B5F7A_8973_4F4D_9AB6_19EB14061FD4__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <vector>
using namespace std; //使用标准库,必须添加命名空间
struct SLineInfo
{
int Angle;
int Dist;
int Pixels;
};
class CImage
{
public:
double CalCorrelation(unsigned char*pBase,unsigned char*pSamp,int nBlockLen);
CString ImageName;
void InCircle(vector<CPoint>&Polygon,vector<SLineInfo>&Lines,double&R,CPoint¢er);
double CalRadius(CPoint point,vector<SLineInfo>&LineInfo);
double Point2Line(CPoint point,SLineInfo Line);
BOOL HoughLines(vector<SLineInfo> &LineInfo,int nLineRet,unsigned char*img,int nwidth,int nheight);
CPoint CenterPoint(vector<CPoint>& VectorPoint);
bool TraceEdge(vector<CPoint>&VectorPoint);
BOOL TraceEdge(unsigned char*lpSrc,int nwidht,int nheight);
void MedianFilter();
int size;
void toBinary(unsigned char *lpSrc,int nwidth,int nheight,int nthread);
unsigned char* BinToRgb(unsigned char *lpSrc, int nWidth, int nHeight);
unsigned char* RgbToBin(unsigned char *lpSrc, int nWidth, int nHeight);
void SelectArea(CPoint ptStart,CPoint ptEnd);
void SelectArea(vector<CPoint>Polygon);
BOOL Backup();
unsigned char* backbuffer;//备份数据
void GaussianSmooth(double sigma);
BOOL toBW(int Thread);
BOOL SaveBMP(LPCTSTR bmpName, unsigned char *imgBuf, int width, int height,int biBitCount, RGBQUAD *pColorTable);
BOOL SaveBMP(LPCTSTR lpszPathName);
void DrawHis(CDC*pDC);
void CalHis(unsigned char*pBits,int nWidth,int nHeight,LONG data[],int nLength);
LONG Min(LONG data[],int nLength,int &id);
LONG Max(LONG data[],int nLength,int &id);
void DrawGraph(CDC *pDC,SIZE sz,LONG data[],int nLength,CString name);
BOOL Canny(double sigma,double dRatioLow,double dRatioHigh);
void Template(unsigned char *lpDIBBits, LONG lWidth, LONG lHeight, int iTempH, int iTempW, FLOAT *fpArray, FLOAT fCoef);
void Canny(LPBYTE pGray, SIZE sz, double sigma, double dRatLow, double dRatHigh, LPBYTE pResult);
void TraceEdge(int y, int x, int nThrLow, LPBYTE pResult, int *pMag, SIZE sz);
void Hysteresis(int *pMag, SIZE sz, double dRatLow, double dRatHigh, LPBYTE pResult);
void EstimateThreshold(int *pMag, SIZE sz, int *pThrHigh, int *pThrLow, LPBYTE pGray,double dRatHigh, double dRatLow);
void NonmaxSuppress(int *pMag, int *pGradX, int *pGradY, SIZE sz, LPBYTE pNSRst);
void Grad(SIZE sz, LPBYTE pGray,int *pGradX, int *pGradY, int *pMag);
void GaussianSmooth(SIZE sz, LPBYTE pGray, LPBYTE pResult, double sigma);
void CreatGauss(double sigma, double **pdKernel, int *pnWidowSize);
BOOL ReadBMP(LPCTSTR lpszPathName);
int openMode;//
BITMAPFILEHEADER bmpFH;
int colorBits;// 位数8 24
int width;
int height;
RGBQUAD* palette;//颜色表指针
unsigned char* imageData;//数据指针
BITMAPINFOHEADER* bmpIH;
BITMAPINFO* bmpInfo;
CImage();
virtual ~CImage();
protected:
unsigned int *buffer;
};
#endif // !defined(AFX_IMAGE_H__294B5F7A_8973_4F4D_9AB6_19EB14061FD4__INCLUDED_)