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

📄 main.pas

📁 模板匹配之手写数字识别系统,基于DELPHI 7.0
💻 PAS
📖 第 1 页 / 共 3 页
字号:
     begin
       if OpenDialog1.Execute then
         begin
          {$I-}
             pathstring:=ExtractFilePath(Application.ExeName)+'feature\pattern.txt';
             AssignFile(f,'pattern.txt');
             Reset(f);
             SepChar:=' ';
            while not Eof(f)do
               begin
                  ReadLn(f,sNumber);
                  Number:=strtoint(sNumber);
                  ReadLn(f,sTotal);
                  Total:=strtoint(sTotal);
                 while Total > 0  do
                 begin
                    pattern[Number].num:=Total;
                   for n:=1 to  Total do             // 特征值的总数
                     begin
                       for i:=1 to  8 do
                         begin              //8行特征
                            ReadLn(f,sFeatureCode);
                            MyLine:=sFeatureCode;
                            Amout:=GetSubStrNum(Myline,SepChar);
                           begin
                             for t:=1 to Amout do         //每一行的字符数
                               item[t]:=GetSubStr(MyLine,SepChar); //分开的字符数组
                           end;
                           for j:= 1 to  8  do
                              pattern[Number].FeatureDetail[n][i][j]:=strtoint(item[j]);//strtoint(FeatureCode);
                        end;
                    end;
                end;
              end;
            end;
         end;
          {$I+}
         CloseFile(f);
   Finally
 end;

end;


function TRecogForm.GetSubStr(var aString:String;SepChar:String):String;
 var
  Mystr:String;
  StrLen:Integer;
  SepCharPos:Integer;
 begin
   StrLen:=Length(aString);
   SepCharPos:=Pos(SepChar,aString); //计算分割符在子串中的位置
   MyStr:=Copy(aString,1,SepCharPos-1); //将分割符前所有字符放到mystr串中
   Delete(aString,1,SepCharPos); //除去分割符和分割符前的子串
   GetSubStr:=MyStr; //返回一个字段
end;
////////////////////////////////////////////////////////
function TRecogForm.GetSubStrNum(aString:String;SepChar:String):integer;
 var
  i:Integer;
  StrLen:Integer;
  Num:Integer;
 begin
   StrLen:=Length(aString);
   Num:=0;
    For i:=1 to StrLen do
      If Copy(aString,i,1) = SepChar then
        Num:=Num+1;
        result:=Num;
 end;

procedure TRecogForm.SaveAllPatternButtonClick(Sender: TObject);
begin
  FeatureManage.TFeature.savetofile();
end;
/////////////////////////////////////////////////////////////////////////
procedure TRecogForm.SaveCurrentPatternButtonClick(Sender: TObject);
var//保存当前数字特征到全局记录中的程序
i,j:integer;
begin
  Writetype:=true;
    begin //8*8的特征值
      for i := 1 to 8 do
        for j := 1 to 8 do
          begin
           if EightCode[j][i]=1 then
              Featurestr[i,j] := 1
        else //特定数字、序号、8*8特征值写入记录中
         Featurestr[i,j] := 0;
         Pattern[StrToInt(NumberEdit.Text)].num:=strtoint(NumberIndexEdit.Text);
         Pattern[StrToInt(NumberEdit.Text)].FeatureDetail
                [StrToInt(NumberIndexEdit.Text)][i][j]:=Featurestr[i,j];
          end;
    end; //数字序号自动加1
    i:=StrToInt(NumberIndexEdit.Text);
    NumberIndexEdit.Text:=inttostr(i+1);
end;
//////////////////////////////////////////////////////////////////////
procedure TRecogForm.N2Click(Sender: TObject);
begin
  RecogToolButtonClick(Sender);
end;

procedure TRecogForm.N3Click(Sender: TObject);
begin
 RecogToolButtonClick(Sender);// ToolButton6.Click;//RecogOrStudy:=0;
end;

procedure TRecogForm.StudyToolButtonClick(Sender: TObject);
var
  Number:integer;
begin
  RecogOrStudy:=1;
  numberindexEdit.Text:='1';
  numberEdit.Text:='0';
  RecogToolButton.Down:=False;
end;

procedure TRecogForm.RecogToolButtonClick(Sender: TObject);
begin
  RecogOrStudy:=0;
  StudyToolButton.Down:=False;
end;

procedure TRecogForm.now1Click(Sender: TObject);
begin
    SaveCurrentPatternButton.Click;
end;


procedure TRecogForm.ToolButton3Click(Sender: TObject);
begin
  SaveCurrentPatternButton.Click;
end;

procedure TRecogForm.SaveAllPatternToolButtonClick(Sender: TObject);
begin
   FeatureManage.TFeature.SaveToFile();
end;

procedure TRecogForm.L1Click(Sender: TObject);
begin
 StudyToolButtonClick(Sender);
end;

procedure TRecogForm.R1Click(Sender: TObject);
begin
 RecogToolButtonClick(Sender);
end;

procedure TRecogForm.N6Click(Sender: TObject);
begin
  ToolButton2.Click;
end;

procedure TRecogForm.N7Click(Sender: TObject);
begin
  ToolButton1.Click;
end;

procedure TRecogForm.N8Click(Sender: TObject);
begin
  ToolButton4.Click;
end;

procedure TRecogForm.Button3Click(Sender: TObject);
var
Number:integer;
begin
if numberEdit.Modified then
  begin
   Number:=strtoint(numberEdit.Text);
   numberindexEdit.Text:= inttostr(pattern[Number].Num+1);
  end;
end;

procedure TRecogForm.N11Click(Sender: TObject);
begin
  AboutBox.ShowModal;
end;

procedure TRecogForm.IndexDisplayButtonClick(Sender: TObject);
var  //显示某一数字类的连续10数字8*8模板
 i,j,k,l,m:integer;
begin
   IndexDisplayEdit1.Text:= StartIndexDisplayEdit.Text;
   for i:=1 to 8 do
        for j:=1 to 8 do
      begin  //X,Y方向各8*8 都按9倍放大
       for k:=1 to 9 do
       for l:=1 to 9 do
       begin
       PatternDisplayImage1.Canvas.Pixels[9*i+k,9*j+l]:=RGB(0,0,0);
        if Pattern[StrToInt(NumberEdit.Text)].FeatureDetail[StrToInt(IndexDisplayEdit1.Text)][j][i]=0 then
        PatternDisplayImage1.Canvas.Pixels[9*i+k,9*j+l]:=Clwhite;
       end;
      end;
   IndexDisplayEdit2.Text:= inttostr(strtoint(StartIndexDisplayEdit.Text)+1);
   for i:=1 to 8 do
        for j:=1 to 8 do
      begin //X,Y方向各8*8 都按9倍放大
       for k:=1 to 9 do
       for l:=1 to 9 do
       begin
       PatternDisplayImage2.Canvas.Pixels[9*i+k,9*j+l]:=RGB(0,0,0);
        if Pattern[StrToInt(NumberEdit.Text)].FeatureDetail[StrToInt(IndexDisplayEdit2.Text)][j][i]=0 then
        PatternDisplayImage2.Canvas.Pixels[9*i+k,9*j+l]:=Clwhite;
       end;
      end;
   IndexDisplayEdit3.Text:= inttostr(strtoint(StartIndexDisplayEdit.Text)+2);
   for i:=1 to 8 do
        for j:=1 to 8 do
      begin //X,Y方向各8*8 都按9倍放大
       for k:=1 to 9 do
       for l:=1 to 9 do
       begin
       PatternDisplayImage3.Canvas.Pixels[9*i+k,9*j+l]:=RGB(0,0,0);
        if Pattern[StrToInt(NumberEdit.Text)].FeatureDetail[StrToInt(IndexDisplayEdit3.Text)][j][i]=0 then
        PatternDisplayImage3.Canvas.Pixels[9*i+k,9*j+l]:=Clwhite;
       end;
      end;
   IndexDisplayEdit4.Text:= inttostr(strtoint(StartIndexDisplayEdit.Text)+3);
   for i:=1 to 8 do
        for j:=1 to 8 do
      begin //X,Y方向各8*8 都按9倍放大
       for k:=1 to 9 do
       for l:=1 to 9 do
       begin
       PatternDisplayImage4.Canvas.Pixels[9*i+k,9*j+l]:=RGB(0,0,0);
        if Pattern[StrToInt(NumberEdit.Text)].FeatureDetail[StrToInt(IndexDisplayEdit4.Text)][j][i]=0 then
        PatternDisplayImage4.Canvas.Pixels[9*i+k,9*j+l]:=Clwhite;
       end;
      end;
   IndexDisplayEdit5.Text:= inttostr(strtoint(StartIndexDisplayEdit.Text)+4);
   for i:=1 to 8 do
        for j:=1 to 8 do
      begin //X,Y方向各8*8 都按9倍放大
       for k:=1 to 9 do
       for l:=1 to 9 do
       begin
       PatternDisplayImage5.Canvas.Pixels[9*i+k,9*j+l]:=RGB(0,0,0);
        if Pattern[StrToInt(NumberEdit.Text)].FeatureDetail[StrToInt(IndexDisplayEdit5.Text)][j][i]=0 then
        PatternDisplayImage5.Canvas.Pixels[9*i+k,9*j+l]:=Clwhite;
       end;
      end;
   IndexDisplayEdit6.Text:= inttostr(strtoint(StartIndexDisplayEdit.Text)+5);
   for i:=1 to 8 do
        for j:=1 to 8 do
      begin //X,Y方向各8*8 都按9倍放大
       for k:=1 to 9 do
       for l:=1 to 9 do
       begin
       PatternDisplayImage6.Canvas.Pixels[9*i+k,9*j+l]:=RGB(0,0,0);
        if Pattern[StrToInt(NumberEdit.Text)].FeatureDetail[StrToInt(IndexDisplayEdit6.Text)][j][i]=0 then
        PatternDisplayImage6.Canvas.Pixels[9*i+k,9*j+l]:=Clwhite;
       end;
      end;
   IndexDisplayEdit7.Text:= inttostr(strtoint(StartIndexDisplayEdit.Text)+6);
   for i:=1 to 8 do
        for j:=1 to 8 do
      begin  //X,Y方向各8*8 都按9倍放大
       for k:=1 to 9 do
       for l:=1 to 9 do
       begin
       PatternDisplayImage7.Canvas.Pixels[9*i+k,9*j+l]:=RGB(0,0,0);
        if Pattern[StrToInt(NumberEdit.Text)].FeatureDetail[StrToInt(IndexDisplayEdit7.Text)][j][i]=0 then
        PatternDisplayImage7.Canvas.Pixels[9*i+k,9*j+l]:=Clwhite;
       end;
      end;
   IndexDisplayEdit8.Text:= inttostr(strtoint(StartIndexDisplayEdit.Text)+7);
   for i:=1 to 8 do
        for j:=1 to 8 do
      begin //X,Y方向各8*8 都按9倍放大
       for k:=1 to 9 do
       for l:=1 to 9 do
       begin
       PatternDisplayImage8.Canvas.Pixels[9*i+k,9*j+l]:=RGB(0,0,0);
        if Pattern[StrToInt(NumberEdit.Text)].FeatureDetail[StrToInt(IndexDisplayEdit8.Text)][j][i]=0 then
        PatternDisplayImage8.Canvas.Pixels[9*i+k,9*j+l]:=Clwhite;
       end;
      end;
   IndexDisplayEdit9.Text:= inttostr(strtoint(StartIndexDisplayEdit.Text)+8);
   for i:=1 to 8 do
        for j:=1 to 8 do
      begin //X,Y方向各8*8 都按9倍放大
       for k:=1 to 9 do
       for l:=1 to 9 do
       begin
       PatternDisplayImage9.Canvas.Pixels[9*i+k,9*j+l]:=RGB(0,0,0);
        if Pattern[StrToInt(NumberEdit.Text)].FeatureDetail[StrToInt(IndexDisplayEdit9.Text)][j][i]=0 then
        PatternDisplayImage9.Canvas.Pixels[9*i+k,9*j+l]:=Clwhite;
       end;
      end;
   IndexDisplayEdit10.Text:= inttostr(strtoint(StartIndexDisplayEdit.Text)+9);
   for i:=1 to 8 do //X,Y方向各8*8 都按9倍放大
        for j:=1 to 8 do
      begin
       for k:=1 to 9 do
       for l:=1 to 9 do
       begin
       PatternDisplayImage10.Canvas.Pixels[9*i+k,9*j+l]:=RGB(0,0,0);
        if Pattern[StrToInt(NumberEdit.Text)].FeatureDetail[StrToInt(IndexDisplayEdit10.Text)][j][i]=0 then
        PatternDisplayImage10.Canvas.Pixels[9*i+k,9*j+l]:=Clwhite;
       end;
      end;
end;
///////////////////////////////////////////////////////////
procedure TRecogForm.ReplaceButtonClick(Sender: TObject);
var//保存标示的数字特征到全局记录中的程序
i,j,k:integer;
begin
  Writetype:=true;
    begin //模板变量8*8的特征值取代
     for k:=0 to 5000 do
     if ((k = StrToInt(IndexDisplayEdit1.Text)) and (CheckBox1.checked=true))or
        ((k = StrToInt(IndexDisplayEdit2.Text)) and (CheckBox2.checked=true))or
        ((k = StrToInt(IndexDisplayEdit3.Text)) and (CheckBox3.checked=true))or
        ((k = StrToInt(IndexDisplayEdit4.Text)) and (CheckBox4.checked=true))or
        ((k = StrToInt(IndexDisplayEdit5.Text)) and (CheckBox5.checked=true))or
        ((k = StrToInt(IndexDisplayEdit6.Text)) and (CheckBox6.checked=true))or
        ((k = StrToInt(IndexDisplayEdit7.Text)) and (CheckBox7.checked=true))or
        ((k = StrToInt(IndexDisplayEdit8.Text)) and (CheckBox8.checked=true))or
        ((k = StrToInt(IndexDisplayEdit9.Text)) and (CheckBox9.checked=true))or
        ((k = StrToInt(IndexDisplayEdit10.Text)) and (CheckBox10.checked=true))
       then
     begin
      for i := 1 to 8 do
        for j := 1 to 8 do
          begin
            Pattern[StrToInt(NumberEdit.Text)].FeatureDetail[k][i][j]:=EightCode[j][i];
          end;
      end;
    end;
end;
/////////////////////////////////////////////////////
procedure TRecogForm.CheckBox1Click(Sender: TObject);
var
  i,j,k,l:integer;
begin
   if   CheckBox1.Checked=true then
  begin
   for i:=1 to 8 do
        for j:=1 to 8 do
      begin
       for k:=1 to 9 do
       for l:=1 to 9 do
       begin
       PatternDisplayImage1.Canvas.Pixels[9*i+k,9*j+l]:=RGB(0,0,0);
        if EightCode[i][j]=0 then
        PatternDisplayImage1.Canvas.Pixels[9*i+k,9*j+l]:=Clwhite;
       end;
      end;
  end;
 end;
end.

⌨️ 快捷键说明

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