to alexzhang00(三角猫)
不是伴水的算法,原先上图形学的时候自己写的算法,从C移植上来的。模式全匹配,比较弱智。
用的Raize 3做的界面~费事发邮件了直接发代码吧~~m那个串是从图片自动生成的匹配串,为了省事,直接写成字符串了。位做任何优化,程序看起来比较恶心~~~~
----------------------------------------------------------
function TfrmMain.OCR(ABitmap: TBitmap): string;
var
i, j: integer;
tmp1, tmp2: string;
m: array[0..9] of string;
begin
m[0] := '001111000100001010000001100000011000000110000001100000011000000110000001100000010100001000111100';
m[1] := '000010000000100000111000000010000000100000001000000010000000100000001000000010000000100000111110';
m[2] := '001111000100001000000001000000010000000100000010000001000000100000010000001000000100000001111111';
m[3] := '001111000100001000000001000000010000001000011100000000100000000100000001000000010100001000111100';
m[4] := '000000100000011000001010000100100010001001000010100000101111111100000010000000100000001000000010';
m[5] := '011111110100000001000000010000000111110000000010000000010000000100000001000000010100001000111100';
m[6] := '000111100010000001000000100000001011110011000010100000011000000110000001100000010100001000111100';
m[7] := '011111110000000100000010000000100000010000000100000010000000100000010000000100000010000000100000';
m[8] := '001111000100001010000001100000010100001000111100010000101000000110000001100000010100001000111100';
m[9] := '001111000100001010000001100000011000000110000001010000110011110100000001000000100000010001111000';
tmp1 := '';
tmp2 := '';
for i := 0 to 3 do
begin
tmp1 := Self.Bmp2Str(ABitmap, i);
for j := 0 to 9 do
begin
if tmp1 = m[j] then
begin
tmp2 := tmp2 + IntToStr(j);
end;
end;
end;
Result := tmp2;
end;
function TfrmMain.Bmp2Str(ABitmap: TBitmap; AIndex: integer): string;
var
w, h: integer;
tmp: string;
begin
tmp := '';
for h := 0 to 11 do
for w := 0 to 7 do
begin
if ABitmap.Canvas.Pixels[(AIndex * 9) + 3 + w, h + 4] = clWhite then
tmp := tmp + '0'
else
tmp := tmp + '1';
end;
Result := tmp;
end;