?? getfeature.cpp
字號(hào):
// GetFeature.cpp: implementation of the GetFeature class.
// 2005.1.13-16:02 By Superman
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "DSPLIT.h"
#include "GetFeature.h"
#include "math.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GetFeature::GetFeature()
{
}
GetFeature::~GetFeature()
{
}
/***************************************************************
* 函數(shù)名稱:GetPosition()
* 函數(shù)類型:void
* 函數(shù)功能:搜索手寫數(shù)字的位置,賦值給bottom,down,right,left
****************************************************************/
void GetFeature::GetPosition()
{
width=GetWidth();
height=GetHeight();
LineBytes=(width*8+31)/32*4;
int i,j;
BOOL flag;
for(j=0;j<height;j++)
{
flag=FALSE;
for(i=0;i<width;i++)
if(m_pData[j*LineBytes+i]==0)
{
flag=TRUE;
break;
}
if(flag)
break;
}
bottom=j;
for(j=height-1;j>0;j--)
{
flag=FALSE;
for(i=0;i<width;i++)
if(m_pData[j*LineBytes+i]==0)
{
flag=TRUE;
break;
}
if(flag)
break;
}
top=j;
for(i=0;i<width;i++)
{
flag=FALSE;
for(j=0;j<height;j++)
if(m_pData[j*LineBytes+i]==0)
{
flag=TRUE;
break;
}
if(flag)
break;
}
left=i;
for(i=width-1;i>0;i--)
{
flag=FALSE;
for(j=0;j<height;j++)
if(m_pData[j*LineBytes+i]==0)
{
flag=TRUE;
break;
}
if(flag)
break;
}
right=i;
}
/***************************************************************
* 函數(shù)名稱:SetFeature()
* 函數(shù)類型:void
* 函數(shù)功能:將手寫數(shù)字特征保存在變量testsample中
****************************************************************/
void GetFeature::SetFeature()
{
int i,j;
for(j=0;j<5;j++)
{
for(i=0;i<5;i++)
{
testsample[5*(4-j)+i]=Cal(j,i);//(Cal(j,i)>0.10)?1:0;//
}
}
}
/****************************************************************
* 函數(shù)名稱:Cal(int row, int col)
* 函數(shù)類型:double
* 參數(shù)說明:int row, int col:第row行,第col個(gè)區(qū)域
* 函數(shù)功能:計(jì)算某一小區(qū)域內(nèi)黑像素所占比例,返回某一小區(qū)域內(nèi)黑像素所占比例
****************************************************************/
double GetFeature::Cal(int row, int col)
{
double w,h,count;
w=(right-left)/5;
h=(top-bottom)/5;
count=0;
for(int j=bottom+row*h;j<bottom+(row+1)*h;j++)
for(int i=left+col*w;i<left+(col+1)*w;i++)
{
if(m_pData[j*LineBytes+i]==0)
count++;
}
return (double)count/(w*h);
}
/***************************************************************
* 函數(shù)名稱:Savealbe(int cls)
* 函數(shù)類型:BOOL
* 參數(shù)說明:int cls:類別
* 函數(shù)功能:判斷手寫數(shù)字可否保存為cls類別的一個(gè)樣品
* 同一類別的樣品不能有重復(fù)的
****************************************************************/
BOOL GetFeature::Saveable(int cls)
{
for(int i=0;i<pattern[cls].number;i++)
{
BOOL flag=TRUE;
for(int j=0;j<25;j++)
flag&=(pattern[cls].feature[i][j]==testsample[j])?TRUE:FALSE;
if (flag) return FALSE;
}
return TRUE;
}
/***************************************************************
* 函數(shù)名稱:Save(int cls)
* 函數(shù)類型:void
* 參數(shù)說明:int cls:類別
* 函數(shù)功能:將手寫數(shù)字保存為cls類別的一個(gè)樣品,保存在樣品的第一個(gè)
****************************************************************/
void GetFeature::Save(int cls)
{
for(int i=pattern[cls].number;i>0;i--)
for(int j=0;j<25;j++)
pattern[cls].feature[i][j]=pattern[cls].feature[i-1][j];
for(i=0;i<25;i++)
pattern[cls].feature[0][i]=testsample[i];
pattern[cls].number++;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -