www.pudn.com > dip.rar > dipView.h


// dipView.h : interface of the CDipView class 
// 
///////////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_DIPVIEW_H__C986E395_5D00_49E6_8CC4_C66489A44EC0__INCLUDED_) 
#define AFX_DIPVIEW_H__C986E395_5D00_49E6_8CC4_C66489A44EC0__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
#include "Mdlg.h" 
#include "digitclass.h" 
#include "AnnBP.h"	// Added by ClassView 
#include "Training.h"	// Added by ClassView 
 
 
class CDipView : public CView 
{ 
//data 
public: 
	int a; 
	int b; 
	CBitmap* m_pBmp; 
	CDC  * m_pMemDC;				//内存DC 
	CBitmap  * m_pBitmap,*mymap;	//背景图像,当前数据的内存图像 
	bool IsNewFile,IsNewBitmap;		//数据是否更新,内存图像是否更新 
	CList  hanList; 
	CList  charList; 
	CList  numList; 
	 
protected: // create from serialization only 
	CDipView(); 
	DECLARE_DYNCREATE(CDipView) 
 
// Attributes 
public: 
	CDipDoc* GetDocument(); 
 
// Operations 
public: 
 
// Overrides 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CDipView) 
	public: 
	virtual void OnDraw(CDC* pDC);  // overridden to draw this view 
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs); 
	virtual void OnInitialUpdate(); 
	protected: 
	virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); 
	virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo); 
	virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo); 
	//}}AFX_VIRTUAL 
 
// Implementation 
public: 
	BYTE* img; 
	 
	void ChageStatuBar(char * fmt); 
	virtual ~CDipView(); 
#ifdef _DEBUG 
	virtual void AssertValid() const; 
	virtual void Dump(CDumpContext& dc) const; 
#endif 
 
protected: 
 
// Generated message map functions 
protected: 
	//{{AFX_MSG(CDipView) 
	afx_msg void OnFileOpen(); 
	afx_msg void OnPaint(); 
	afx_msg void OnFileSave(); 
	afx_msg void Onreopen(); 
	afx_msg void OnMouseMove(UINT nFlags, CPoint point); 
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 
	afx_msg void OnLine(); 
	afx_msg void Onrhua(); 
	afx_msg void Onphua(); 
	afx_msg void Onfse(); 
	afx_msg void Onfz(); 
	afx_msg void OnMoHu(); 
	afx_msg void OnSuoXiao(); 
	afx_msg void OnForHandle(); 
	afx_msg void OnHSearch(); 
	afx_msg void OnBanlance(); 
	afx_msg void OnSubVertical(); 
	afx_msg void OnSubHorizontal(); 
	afx_msg void OnMidValue(); 
	afx_msg void OnAverage(); 
	afx_msg void OnBool(); 
	afx_msg void OnChoose(); 
	afx_msg void OnTrainfromvehicle(); 
	afx_msg void OnSave(); 
	afx_msg void OnLoad(); 
	afx_msg void OnChange(); 
	afx_msg void OnTrain(); 
	afx_msg void OnSavebp(); 
	afx_msg void OnReadbp(); 
	//}}AFX_MSG 
	DECLARE_MESSAGE_MAP() 
public: 
	CTraining* m_pdlg; 
	CAnnBP char_num_bp; 
	CAnnBP num_bp; 
	CAnnBP char_bp; 
	POSITION char_ConnectPos; 
	POSITION num_ConnectPos; 
	POSITION han_ConnectPos; 
	//分割出的字符数 
	int CharacterNum; 
	void ForHandle(BYTE* DisposeImg,int width,int height); 
	void VFurthLocate(BYTE* DisposeImg,int width,int height); 
	// 精确定位 
	void FurtherLocate(CDipDoc *DisposeImg,int width,int height); 
	int MaxJump(int *JumpNums,int num); 
	// 计算各伪车牌区的跳变数 
	int JumpNum(BYTE*DisposeImg,int width,int height); 
	// 去伪存真 
	void Choose(CDipDoc *DisposeImg,int width,int height); 
	afx_msg void OnVSearch(); 
	afx_msg void OnLocate(); 
	// 均衡化图象 
	void Banlance(BYTE* DisposeImg,int Width,int Height); 
	// 图象复制 
	void CopyImg(CDipDoc *SourceImg, BYTE* DestImg, int Width, int Height); 
	// 水平差分 
	void HSub(BYTE* DisposeImg, int Width , int Height); 
	// 选择区域的高度 
	int* Height; 
	// 选择区域的起始行 
	int* TopRow; 
	// 完成图象车牌区域的定位 
	void Search(BYTE* DisposeImg, int width , int height); 
	// 图象复制 
	void CopyImg(BYTE* SourceImg, BYTE* DestImg, int Width , int Height); 
	// 标识车牌区域	 
	void Mark(CDipDoc * DisposeImg, int width , int height); 
	void VSearch(BYTE* DisposeImg, int width, int height); 
	// 车牌宽度区域值 
	int* Widths; 
	// 车牌左边缘 
	int* Left; 
	// 纵向差分 
	void VSub(BYTE* DisposeImg, int Width , int Height); 
	// 纵向定位 
	void VMark(CDipDoc* DisposeImg, int width, int height);	 
	// 起始位置的横坐标 
	int* Rect_X; 
	// 纵坐标 
	int* Rect_Y; 
	// 宽度 
	int* Rect_W; 
	// 高度 
	int* Rect_H; 
	// 伪车牌区域 
	void DrawRect(CDipDoc* DisposeImg, int width, int height); 
	// 可能的区域数 
	int Rect_Areas; 
	// 寻找left==255,right==0的列 
	int FindNextCol_LR(int* HProj, int size, int objectCol); 
	// 寻找right==255,left==0的列 
	int FindNextCol_RL(int* HProj, int size, int objectCol); 
	afx_msg void OnSobel(); 
	afx_msg void OnVSplit();         
	// 图像规定化0~100 
	void GuiYiHua(BYTE* DisposeImg, int width , int height); 
	// 增强车牌区,削弱背景 
	void Hance(BYTE* DisposeImg, int width , int height); 
	afx_msg void OnGuiYiHua(); 
	afx_msg void OnHance(); 
	// 分割出字符 
	void HProj(BYTE* DisposeImg, int* projArray, int width , int height); 
	// 寻找波谷 
	void FindTrough(int* Array, int size); 
	//剔除部分边框 
	//void DropLine(BYTE* DisposeImg, int width,int height); 
	// 精确定位各字符域 
	void FindCharacter(BYTE* DisposeImg, int width , int height ,int*Array, int size); 
	//车牌区域再次定位 
	void VSearchAdvance(BYTE* DisposeImg, int width, int height,int lside); 
	// 分割字符 
	void CharacterSplit(int* Array, int size); 
	 
	//字符区域的矩形表示(相对与原始图象) 
	struct cRect 
	{ 
		int x; 
		int y; 
		int w; 
		int h; 
	}; 
	typedef cRect crect; 
	crect *cRects; 
 
	//字符区域的实际数据保存 
	struct characetrData 
	{ 
		BYTE* Img; 
		int w; 
		int h; 
	}; 
	typedef characetrData cData; 
	cData *cDatas; 
 
	struct sample//保存样本的结构体 
	{ 
		double feature[13];//样本的特征向量 
		char trueClass[3];//样本所属的真实类别+ 
		int serialnum;//序列号 
	}; 
 
	int CDipView::map(char *character); 
/*	// //读取样本库,传入一个sample类型的数组(从文件里读出的样本数据将放入其中),返回值为样本个数 
	int LoadCharLib(sample* sa); 
	// 缩放算法,一律缩放为20*36 
	void Zoom(BYTE* DisposeImg, int width, int height); 
	// 二值化算法,二值化为0和1两种值 
	void BinaryImg(BYTE* DisposeImg, int width , int height); 
	// Hilditch细化算法 
	void ThinnerHilditch(void*image, unsigned long lx, unsigned long ly); 
	// 细化算法 
	void ThinImage(BYTE* image, int width, int height); 
	// 获取特征值的函数 
	void GetFeature(BYTE* image, long width, long height, double* feature, int size); 
	// 识别函数,第一个参数为LoadCharLib读出的数组,第二个参数为LoadCharLib的返回值(即样本个数),将上面获得的特征值传入第三个参数,返回为识别结果 
	CString Recognize(sample* sa, int num, double* feature); 
	// 字符识别 
	void GetCharacter();*/ 
	afx_msg void OnCharacterRecg(); 
}; 
 
#ifndef _DEBUG  // debug version in dipView.cpp 
inline CDipDoc* CDipView::GetDocument() 
   { return (CDipDoc*)m_pDocument; } 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
 
//{{AFX_INSERT_LOCATION}} 
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. 
 
#endif // !defined(AFX_DIPVIEW_H__C986E395_5D00_49E6_8CC4_C66489A44EC0__INCLUDED_)