首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

用delphi比较两张图片的相似度,该怎么解决

2012-03-07 
用delphi比较两张图片的相似度有两张相像的图片,请问怎样比较这两张图片的相似程度??谢谢[解决办法]我以前

用delphi比较两张图片的相似度
有两张相像的图片,请问怎样比较这两张图片的相似程度??谢谢

[解决办法]
我以前 做刷票的 时候 的 简单 图片的 比较
procedure TFrm_test.initList;
var
idx, i, k, x, y, l: integer;
p, fn: string;
bmp: TBitmap;
BColor, NowColor: TColor;
begin

p := ExtractFilePath(Application.ExeName);
bmp := TBitmap.Create;
for i := 0 to 9 do
begin
fn := p + '\CodeBmp\ ' + IntToStr(i) + '.bmp ';
if not FileExists(fn) then
Continue;

idx := length(PointRecList);
SetLength(PointRecList, idx + 1);
PointRecList[idx].Code := inttostr(i);

bmp.LoadFromFile(fn);
BColor := bmp.Canvas.Pixels[0, bmp.Height - 1];

for x := 0 to bmp.Width - 1 do
for y := 0 to bmp.Height - 1 do
begin
NowColor := bmp.Canvas.Pixels[x, y];
if NowColor <> BColor then
begin
l := length(PointRecList[idx].PointList);
SetLength(PointRecList[idx].PointList, l + 1);
PointRecList[idx].PointList[l].X := x;
PointRecList[idx].PointList[l].y := y;
end;
end;


end;

FreeAndNil(bmp);


//
end;
function getCode_Bmp(const bmp: TBitmap; strLen: integer; PointRecList: array of TPointRec): string;
var
j, i, l, x, y, x0, xS, beginx: integer;

BColor, NowColor: TColor;
PointList: array of TPoint;
function getCode: string;
var
maxCount, k, m, j, i: integer;

begin
Result := '? ';
if length(PointList) < 3 then
exit;

maxCount := 0;
for i := 0 to high(PointRecList) do
begin

if length(PointRecList[i].PointList) < 3 then
Continue;

m := 0;

for K := 1 to high(PointList) do
begin

for j := 1 to high(PointRecList[i].PointList) do
if
((PointList[k].X - PointList[0].X) = (PointRecList[i].PointList[j].X - PointRecList[i].PointList[0].X))
and
((PointList[k].y - PointList[0].y) = (PointRecList[i].PointList[j].y - PointRecList[i].PointList[0].y))

then
begin
inc(m);
Break;
end;

end;

m := m * 100 div (length(PointList) - 1);
if m > maxCount then
begin
Result := PointRecList[i].Code;
maxCount := m;
end;
end;
end;

begin
Result := ' ';

BColor := bmp.Canvas.Pixels[0, bmp.Height - 1];
x0 := 0;
xS := bmp.Width div strLen;
for i := 0 to strLen - 1 do
begin
beginx := x0 + xS * i;
SetLength(PointList, 0);
for j := 0 to xS - 1 do
begin
x := beginx + j;
for y := 0 to bmp.Height - 1 do
begin
NowColor := bmp.Canvas.Pixels[x, y];
if NowColor <> BColor then
begin
l := length(PointList);
SetLength(PointList, l + 1);
PointList[l].X := x;
PointList[l].y := y;
end;
end;
end;
Result := Result + getCode;
end;


end;


热点排行