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

📄 wirecognitiondlg.cpp

📁 本程序中列举了数字图象模式识别领域中的常用程序,可以在其基础上进行图象处理.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		if(currTest >= numOfTest)
			currTest = numOfTest-1;
	}
	OnShow1();
	OnShow2();
}

void CWiRecognitionDlg::OnInputTest() 
{
	// TODO: Add your control notification handler code here
	
	wi.DelSampleSetPath (1);

	CAddSampleDlg FileDlg(TRUE, "", NULL, 
		OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT, 
		"TextFiles (*.pnt)|*.pnt|All Files(*.*)|*.*||",
		AfxGetMainWnd());

	if (FileDlg.DoModal () != IDOK)
		return;

	CString strFile,strInfo;
	CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT2);
	pEdit->SetSel(0,-1);
	pEdit->ReplaceSel("");
	POSITION pos = FileDlg.GetStartPosition();
	while( pos ) 
	{
		strFile =FileDlg.GetNextPathName( pos );//获取文件名
		wi.AddSampleSetPath (strFile, 1);		//添加测试样本集
		strInfo = strFile+"\r\n";
		pEdit->SetSel(-1,-1);
		pEdit->ReplaceSel(strInfo);

	}	
	numOfTest = wi.testSetDataFilePath.GetSize();
	currTest = 0;
	wi.RetrieveSample(&wi.testSetDataFilePath,&wi.testSampleArray);
	wi.PreProcSample(&wi.testSampleArray,0);
	wi.GenVector(&wi.testSampleArray);
	wi.GenVQVector(&wi.testSampleArray);
}

void CWiRecognitionDlg::OnShow2() 
{
	// TODO: Add your control notification handler code here
	CWnd *pWnd = (CWnd *)GetDlgItem(IDC_PICTURE2);
	HWND hWnd = pWnd->m_hWnd;
	HDC hDC = ::GetDC(hWnd);
	if(m_TestTrain == 1)
	{
		if(numOfTrain == 0)
			return;
		CWi::Sample* s =(CWi::Sample*)wi.trainSampleArray.GetAt(currTrain);
		DrawPress(s,hDC);
	}
	else
	{
		if(numOfTest == 0)
			return;
		CWi::Sample* s =(CWi::Sample*)wi.testSampleArray.GetAt(currTest);
		DrawPress(s,hDC);
	}

	
}

void CWiRecognitionDlg::DrawPress(CWi::Sample *s,HDC hDC)
{
	int i,j,begin;
	
	if(s == NULL)
		return;
	if(pressPos>RAWDATADIM-IMAGEWIDTH)
		begin = RAWDATADIM-IMAGEWIDTH;
	else
		begin = pressPos;
	int num;
	int *pos =(int *)malloc(sizeof(int)*s->effectDataNum);
	num = wi.WaveCrest(s->pressTotal2,s->pressTotal,pos,s->effectDataNum,5);
	for(i = 0;i<IMAGEWIDTH;i++)
	{
		for(j=0;j<128;j++)
		{	
			if(((int)s->pressA[begin+i]-80)/2 == j)
				::SetPixel(hDC,i,IMAGEHEIGHT-j,RGB(255,0,0));
			else if(((int)s->pressB[begin+i]-80)/2 == j)
				::SetPixel(hDC,i,IMAGEHEIGHT-j,RGB(0,255,0));
			else if(((int)s->pressC[begin+i]-80)/2 == j)
				::SetPixel(hDC,i,IMAGEHEIGHT-j,RGB(0,0,255));
			else if(((int)s->pressTotal2[begin+i]-20)/2 == j)
			{
				::SetPixel(hDC,i,IMAGEHEIGHT-j,RGB(0,0,0));
				for(int t=0;t<num;t++)
				{
					if(pos[t]==begin+i)
						SetPixel(hDC,i,IMAGEHEIGHT-j,RGB(255,0,0));
				}

			}
			else
				::SetPixel(hDC,i,IMAGEHEIGHT-j,RGB(255,255,255));
			
		}

	}

}

void CWiRecognitionDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default

	int ScrollPos=pScrollBar->GetScrollPos();

	switch( nSBCode ){
		case SB_LINELEFT:
			ScrollPos -= 2;
			break;
		case SB_LINERIGHT:
			ScrollPos+= 2;
			break;
		case SB_PAGELEFT:
			ScrollPos -= IMAGEWIDTH;
			break;	
		case SB_PAGERIGHT:
			ScrollPos += IMAGEWIDTH;
			break;	
		case SB_THUMBPOSITION:
		case SB_THUMBTRACK:
			if(nPos % 2)
				++nPos;
			ScrollPos = nPos;
		break;
	
	}
	
	if(ScrollPos < 0 )
		 ScrollPos = 0;
	if( ScrollPos> RAWDATADIM )
		 ScrollPos = RAWDATADIM;

	pressPos = ScrollPos;
	pScrollBar->SetScrollPos((int)ScrollPos);  
	OnShow2();

	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

void CWiRecognitionDlg::OnGentemp() 
{
	// TODO: Add your control notification handler code here
	if(m_Method == 0)
		wi.GenTemplatePress();
	else if(m_Method == 1)
		wi.GenTemplateXpos();
	else if(m_Method == 2)
		wi.GenTemplateYpos();
	else if(m_Method == 3)
		wi.GenTemplateXY();
	else if(m_Method == 4)
		wi.OnMovement();
	else if(m_Method == 5)
		wi.OnDirection();
	else if(m_Method == 6)
		wi.GenTemplateVector();
	else if(m_Method == 7)
		wi.GenVQTemplate();
	CString msg;
	msg.Format("threhold: %f",wi.threshold);
	MessageBox(msg);
}

void CWiRecognitionDlg::OnRecognition() 
{
	// TODO: Add your control notification handler code here
	double retval;
	CString msg,strFile;
	double distance  = 0.0;
	int num = wi.testSetDataFilePath.GetSize();
	CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT2);
	pEdit->SetSel(0,-1);
	pEdit->ReplaceSel("");

	for(int i = 0;i<num;i++)
	{
		if(m_Method == 0)
			retval = wi.RecogTemplatePress(&distance,i);
		else if(m_Method == 1)
			retval = wi.RecogTemplateXpos(&distance,i);
		else if(m_Method == 2)
			retval = wi.RecogTemplateYpos(&distance,i);
		else if(m_Method == 3)
			retval = wi.RecogTemplateXY(&distance,i);
		else if(m_Method == 4)
			retval = wi.RecogMovement(&distance,i);
		else if(m_Method == 5)
			retval = wi.RegDih(&distance,i);
		else if(m_Method == 6)
			retval = wi.RecogTemplateVec(&distance,i);
		else if(m_Method == 7)
			retval = wi.RecogHMM(&distance, i);

		strFile = wi.testSetDataFilePath.GetAt(i);
		if(retval == -1)
		{
			msg.Format("distance=%f Fail!   ",distance);
			msg+=strFile;
			msg+="\r\n";
			pEdit->SetSel(-1,-1);
			pEdit->ReplaceSel(msg);
   
		}
		else if(retval == 1)
		{
			msg.Format("distance=%f Success!",distance);
			msg+=strFile;
			msg+="\r\n";
			pEdit->SetSel(-1,-1);
			pEdit->ReplaceSel(msg);

		}
	
	}
}

void CWiRecognitionDlg::OnSaveTemp() 
{
	// TODO: Add your control notification handler code here
	CFileDialog *dlg;	     	//保存文件对话框
	dlg= new CFileDialog(FALSE,"tmp","*.tmp",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"Template Files(*.tmp)|*.tmp|All Files(*.*)|*.*||");
	char SaveAsName[256];
	if ( dlg->DoModal()==IDOK)
	{				
		strncpy(SaveAsName,dlg->GetPathName(),strlen(dlg->GetPathName()));
		SaveAsName[strlen(dlg->GetPathName())]=0;

		if(m_Method == 0)
			wi.SaveTemplatePress(SaveAsName);
		else if(m_Method == 1)
			wi.SaveTemplateXpos(SaveAsName);
		else if(m_Method == 2)
			wi.SaveTemplateYpos(SaveAsName);
		else if(m_Method == 3)
			wi.SaveTemplateXY(SaveAsName);
		else if(m_Method == 4)
			wi.SaveMovement(SaveAsName);
		else if(m_Method == 5)
			wi.SaveDih(SaveAsName);
		else if(m_Method == 6)
			wi.SaveTemplateVec(SaveAsName);
		else if(m_Method == 7)
			wi.SaveHMM(SaveAsName);
		
	}
}

void CWiRecognitionDlg::OnLoadTemp() 
{
	// TODO: Add your control notification handler code here
	CFileDialog *dlg;	//打开文件对话框
	dlg= new CFileDialog(TRUE,"tmp","*.tmp",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"Template Files(*.tmp)|*.tmp|All Files(*.*)|*.*||");
 	char OpenName[256];
	int retval;
 	if ( dlg->DoModal()==IDOK)
	{				
		strncpy(OpenName,dlg->GetPathName(),strlen(dlg->GetPathName()));
		OpenName[strlen(dlg->GetPathName())]=0;

		if(m_Method == 0)
			retval = wi.LoadTemplatePress(OpenName);
		else if(m_Method == 1)
			retval = wi.LoadTemplateXpos(OpenName);
		else if(m_Method == 2)
			retval = wi.LoadTemplateYpos(OpenName);
		else if(m_Method == 3)
			retval = wi.LoadTemplateXY(OpenName);
		else if(m_Method == 4)
			retval = wi.LoadMovement(OpenName);
		else if(m_Method == 5)
			retval = wi.LoadDih(OpenName);
		else if(m_Method == 6)
			retval = wi.LoadTemplateVec(OpenName);
		else if(m_Method == 7)
			retval = wi.LoadHMM(OpenName);
	}
	
	if(retval == -1)
		MessageBox("Load Template Error!");
}

void CWiRecognitionDlg::OnSelchangeMethod() 
{
	// TODO: Add your control notification handler code here
	CComboBox *pBox = (CComboBox *)GetDlgItem(IDC_METHOD);
	m_Method = pBox->GetCurSel();
	
}


void CWiRecognitionDlg::OnRadioTest() 
{
	// TODO: Add your control notification handler code here
	m_TestTrain = 0;
	OnShow1();
	OnShow2();
}

void CWiRecognitionDlg::OnRadioTrain() 
{
	// TODO: Add your control notification handler code here
	m_TestTrain = 1;
	OnShow1();
	OnShow2();
}

⌨️ 快捷键说明

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