⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 showprocedure.cpp

📁 车牌识别(改定位)武汉理工大学
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	}
	if (m_TextImgList.GetCount()<1) {
		InvalidateRect(NULL);
		return FALSE;
	}
	
	m_strResult = RecChar(m_TextImgList);
	
	POSITION pos = m_TextImgList.GetHeadPosition();
	int nCount = m_TextImgList.GetCount();
	m_ImgTextPic.Create(CSize(34*nCount,64),FALSE);
	int nTop = 0;
	COleDateTime time = COleDateTime::GetCurrentTime();
	while (pos)
	{
		CImage imgTemp = m_TextImgList.GetNext(pos);		
		imgTemp.Stretch(CSize(32,64));	
		
		if (m_bExample)
		{
			strPath.Format("%sExaple\\%s%d.bmp",
				GetAppPath(),TimeToString(COleDateTime::GetCurrentTime()),rand());
			imgTemp.SaveBMP(strPath);
		}
		
		for(int i=0;i<64;i++)
		{
			for(int j=0;j<32;j++)
			{
				m_ImgTextPic.m_pR[m_ImgTextPic.GetWidth()*i+j+nTop*34] = 
					imgTemp.m_pR[imgTemp.GetWidth()*i+j];
			}
		}
		nTop++;
	}
	InvalidateRect(NULL);
	UpdateData(FALSE);
	return TRUE;
}

void CShowProcedure::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	CWnd * pWnd;
	CDC * pDC;
	CRect rcWin;

	//原始图象
	pWnd = GetDlgItem(IDC_ORG_IMAGE);
	pWnd->GetWindowRect(rcWin);
	rcWin.OffsetRect(-rcWin.TopLeft());
	pDC = pWnd->GetDC();
	pWnd->Invalidate();
	pWnd->UpdateWindow();
	pDC->Rectangle(rcWin);
	m_ImgOrg.Draw(pDC,CPoint(0,0),CSize(rcWin.Width(),rcWin.Height()));
	pWnd->ReleaseDC(pDC);

	//剪切后灰度的图象
	pWnd = GetDlgItem(IDC_AFTER_CUT);
	pWnd->GetWindowRect(rcWin);
	rcWin.OffsetRect(-rcWin.TopLeft());
	pDC = pWnd->GetDC();
	pWnd->Invalidate();
	pWnd->UpdateWindow();
	pDC->Rectangle(rcWin);
	m_ImgGray.Draw(pDC,CPoint(0,0),CSize(rcWin.Width(),rcWin.Height()));
	pWnd->ReleaseDC(pDC);

	//二值化
	pWnd = GetDlgItem(IDC_THRETHOLD);
	pWnd->GetWindowRect(rcWin);
	rcWin.OffsetRect(-rcWin.TopLeft());
	pDC = pWnd->GetDC();
	pWnd->Invalidate();
	pWnd->UpdateWindow();
	pDC->Rectangle(rcWin);
	m_ImgTwo.Draw(pDC,CPoint(0,0),CSize(rcWin.Width(),rcWin.Height()));
	pWnd->ReleaseDC(pDC);

	//定位图象
	pWnd = GetDlgItem(IDC_LOCATION);
	pWnd->GetWindowRect(rcWin);
	rcWin.OffsetRect(-rcWin.TopLeft());
	pDC = pWnd->GetDC();
	pWnd->Invalidate();
	pWnd->UpdateWindow();
	pDC->Rectangle(rcWin);
	m_ImgLocation.Draw(pDC,CPoint(0,0),CSize(rcWin.Width(),rcWin.Height()));
	pWnd->ReleaseDC(pDC);

	//车牌
	pWnd = GetDlgItem(IDC_CHE_PAI);
	pWnd->GetWindowRect(rcWin);
	rcWin.OffsetRect(-rcWin.TopLeft());
	pDC = pWnd->GetDC();
	pWnd->Invalidate();
	pWnd->UpdateWindow();
	pDC->Rectangle(rcWin);
	m_ImgChePai.Draw(pDC,CPoint(0,0),CSize(rcWin.Width(),rcWin.Height()));
	pWnd->ReleaseDC(pDC);

	//文字
	pWnd = GetDlgItem(IDC_TEXT_PIC);
	pWnd->GetWindowRect(rcWin);
	rcWin.OffsetRect(-rcWin.TopLeft());
	pDC = pWnd->GetDC();
	pWnd->Invalidate();
	pWnd->UpdateWindow();
	pDC->Rectangle(rcWin);
	m_ImgTextPic.Draw(pDC,CPoint(0,0),CSize(rcWin.Width(),rcWin.Height()));
	pWnd->ReleaseDC(pDC);

	
}
BOOL CShowProcedure::DeleteDirectory(CString DirName)
{
	CFileFind ff;
	CString path=DirName;
	if (path.Right(1)!="\\") {
		path+="\\";
	}
	path+="*.*";
	BOOL IsFinded=ff.FindFile(path);
	while (IsFinded) 
	{
		IsFinded=ff.FindNextFile();
		if (!ff.IsDots()&&!ff.IsDirectory()) 
		{
			DeleteFile(ff.GetFilePath());
		}
		else if (ff.IsDots())
		{
			continue;
		}
		else if (ff.IsDirectory()) 
		{
			path=ff.GetFilePath();
			DeleteDirectory(path);
			RemoveDirectory(path);
		}
	}
	RemoveDirectory(DirName);
	ff.Close();
	return TRUE;
}
void CShowProcedure::OnButtonOpen() 
{
	CFileDialog fileOpenDlg(TRUE, "jpg", "*.jpg;*.bmp",OFN_ALLOWMULTISELECT , "All Files(*.jpg;*.bmp)", NULL);
	if(fileOpenDlg.DoModal()==IDOK)
	{
		m_ListCtrlFileName.DeleteAllItems();
		
		CFileFind filefind;	
		m_strFolder = fileOpenDlg.GetPathName();
		int nPos = m_strFolder.ReverseFind ('\\');
		m_strFolder = m_strFolder.Left (nPos+1);
		int nTop = 0;
		if(filefind.FindFile(m_strFolder+"*.jpg"))
		{
			while (filefind.FindNextFile()) 
			{
				m_ListCtrlFileName.InsertItem(nTop++,filefind.GetFileName());
			}
			m_ListCtrlFileName.InsertItem(nTop++,filefind.GetFileName());
		}

		if(filefind.FindFile(m_strFolder+"*.bmp"))
		{
			while (filefind.FindNextFile()) 
			{
				m_ListCtrlFileName.InsertItem(nTop++,filefind.GetFileName());
			}
			m_ListCtrlFileName.InsertItem(nTop++,filefind.GetFileName());
		}
	}
}


void CShowProcedure::OnMenuOpen() 
{	
}

void CShowProcedure::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}


BYTE CShowProcedure::GetThredHold(CImage &ImgIn, double dPercent)
{
	BYTE pHist[3][256];
	BYTE pMean[3];
	double dS[3];
	ImgIn.CalCulate(pHist,pMean,dS);
	int nPix = ImgIn.GetWidth()*ImgIn.GetHeight();
	double dSum = 0;
	for(int i=0;i<256;i++)
	{
		dSum += pHist[0][i];
		if (dSum/nPix>=dPercent)
		{
			break;
		}
	}
	i = i>255?255:i;
	return i;
}

BOOL CShowProcedure::OnInitDialog() 
{
	CDialog::OnInitDialog();	
	m_ListCtrlFileName.InsertColumn(0,"文件名",LVCFMT_LEFT,250);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CShowProcedure::OnButtonRec() 
{
}
double CShowProcedure::m_dOutputList[]={0,1,2,3,4,5,6,7,8,9};
char CShowProcedure::m_cOutputList[]="0123456789";
void CShowProcedure::OnButtonTrain() 
{
	CString strPath;
	strPath.Format("%sannInt.ann",GetAppPath());
	m_BpNet.TrainInt(strPath);
}



void CShowProcedure::OnLButtonDown(UINT nFlags, CPoint point) 
{	
	CWnd * pWnd;
	CRect rcWin;	
	//原始图象
	pWnd = GetDlgItem(IDC_ORG_IMAGE);
	ClientToScreen(&point);
	pWnd->GetWindowRect(rcWin);
	if (rcWin.PtInRect(point))
	{
		m_ImgOrg.ShowImg();
	}
	//剪切后灰度的图象
	pWnd = GetDlgItem(IDC_AFTER_CUT);
	pWnd->GetWindowRect(rcWin);
	if (rcWin.PtInRect(point))
	{
		m_ImgGray.ShowImg();
	}
	
	//二值化
	pWnd = GetDlgItem(IDC_THRETHOLD);
	pWnd->GetWindowRect(rcWin);
	if (rcWin.PtInRect(point))
	{
		m_ImgTwo.ShowImg();
	}
	
	//定位图象
	pWnd = GetDlgItem(IDC_LOCATION);
	pWnd->GetWindowRect(rcWin);
	if (rcWin.PtInRect(point))
	{
		m_ImgLocation.ShowImg();
	}
	
	//车牌
	pWnd = GetDlgItem(IDC_CHE_PAI);
	pWnd->GetWindowRect(rcWin);
	if (rcWin.PtInRect(point))
	{
		m_ImgChePai.ShowImg();
	}
	
	//文字
	pWnd = GetDlgItem(IDC_TEXT_PIC);
	pWnd->GetWindowRect(rcWin);
	if (rcWin.PtInRect(point)) 
	{
		m_ImgTextPic.ShowImg();
	}
	
	CDialog::OnLButtonDown(nFlags, point);
}

void CShowProcedure::OnRButtonDown(UINT nFlags, CPoint point) 
{	
	char szFilter[] = "BMP Files (*.bmp)|*.bmp||";
	CFileDialog     fd(FALSE,"*.bmp",NULL,0,szFilter,this);

	CWnd * pWnd;
	CRect rcWin;	
	//原始图象
	pWnd = GetDlgItem(IDC_ORG_IMAGE);
	ClientToScreen(&point);
	pWnd->GetWindowRect(rcWin);
	
	if (rcWin.PtInRect(point))
	{
		if (fd.DoModal()==IDOK) 
		{
			m_ImgOrg.SaveBMP(fd.GetPathName());
		}
	}
	//剪切后灰度的图象
	pWnd = GetDlgItem(IDC_AFTER_CUT);
	pWnd->GetWindowRect(rcWin);
	if (rcWin.PtInRect(point))
	{
		if (fd.DoModal()==IDOK) 
		{
			m_ImgGray.SaveBMP(fd.GetPathName());
		}
	}
	
	//二值化
	pWnd = GetDlgItem(IDC_THRETHOLD);
	pWnd->GetWindowRect(rcWin);
	if (rcWin.PtInRect(point))
	{
		if (fd.DoModal()==IDOK) 
		{
			m_ImgTwo.SaveBMP(fd.GetPathName());
		}
	}
	
	//定位图象
	pWnd = GetDlgItem(IDC_LOCATION);
	pWnd->GetWindowRect(rcWin);
	if (rcWin.PtInRect(point))
	{
		if (fd.DoModal()==IDOK) 
		{
			m_ImgLocation.SaveBMP(fd.GetPathName());
		}
	}
	
	//车牌
	pWnd = GetDlgItem(IDC_CHE_PAI);
	pWnd->GetWindowRect(rcWin);
	if (rcWin.PtInRect(point))
	{
		if (fd.DoModal()==IDOK) 
		{
			m_ImgChePai.SaveBMP(fd.GetPathName());
		}
	}
	
	//文字
	pWnd = GetDlgItem(IDC_TEXT_PIC);
	pWnd->GetWindowRect(rcWin);
	if(rcWin.PtInRect(point))
	{
		CImage ImgOut;
		int step = (rcWin.right-rcWin.left)/7;
		int j = 0;
		for(int i=0;i<=7;i++)
		{
			if(point.x<(rcWin.left+i*step))
			{
				j = i-1;
				break;
			}
		}
		step = m_ImgTextPic.GetWidth()/7;
        m_ImgTextPic.CutFromImg(ImgOut,CRect(j*step,0,(j+1)*step,m_ImgTextPic.GetHeight()));
     //   ImgOut.ShowImg();
		if (fd.DoModal()==IDOK) 
		{
			ImgOut.SaveBMP(fd.GetPathName());
		}
	}
	CDialog::OnRButtonDown(nFlags, point);
}

CString CShowProcedure::TimeToString(COleDateTime time)
{
	CString strOut;
	strOut.Format("%d%d%d%d%d%d",
	time.GetYear(),time.GetMonth(),time.GetDay(),
	time.GetHour(),time.GetMinute(),time.GetSecond());
	return strOut;
}

void CShowProcedure::OnButtonSaveAsExaple() 
{
	int nTop = 0;
	CString strPath;
	POSITION pos = m_TextImgList.GetHeadPosition();
	COleDateTime time = COleDateTime::GetCurrentTime();
	while (pos)
	{
		CImage imgTemp = m_TextImgList.GetNext(pos);		
		imgTemp.Stretch(CSize(32,64));
		
		strPath.Format("%sExaple\\%s%d.bmp",
			GetAppPath(),TimeToString(COleDateTime::GetCurrentTime()),nTop+1);
		imgTemp.SaveBMP(strPath);
		nTop++;
	}
	MessageBox("保存成功","提示信息");
}

void CShowProcedure::OnButtonLoadAnn() 
{
	CFileDialog fileOpenDlg(TRUE, "ANN", "*.ANN",OFN_ALLOWMULTISELECT , "All Files(*.*)", NULL);
	if(fileOpenDlg.DoModal()==IDOK)
	{
	//	m_BpNet.LoadBpNet(fileOpenDlg.GetPathName());
	}
}

void CShowProcedure::OnButtonStop() 
{
	m_BpNet.m_BpNetChar.stop();
	m_BpNet.m_BpNetInt.stop();
	m_BpNet.m_BpNetInt1.stop();

	m_RecBaseInt3.StopTrain();
}

void CShowProcedure::OnButtonAll() 
{	
	UpdateData(TRUE);
	MSG msg;
	int nCount = m_ListCtrlFileName.GetItemCount();
	for(int i=0;i<nCount;i++)
	{
		CString strFileName;
		strFileName = m_ListCtrlFileName.GetItemText(i,0);
		strFileName = m_strFolder + strFileName;
		Run(strFileName);
		::PeekMessage(&msg,NULL,0,0,PM_REMOVE);
		::DispatchMessage(&msg);
		msg.message=-1;
		::DispatchMessage(&msg);//这样可以消除屏闪和假死机
	}
}


void CShowProcedure::OnDblclkListFileList() 
{	
	
}

void CShowProcedure::OnClickListFileName(NMHDR* pNMHDR, LRESULT* pResult) 
{	
	UpdateData(TRUE);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -