简单的图片对比函数
function Compare(bit1: TBitmap; bit2: TBitmap; nC: Integer; Img: TImage): Integer;
var
x,y , nRe: Integer;
bx, by, bbs: Byte;
bColor: TColor;
temBit: TBitmap;
begin
if Img <> nil then
begin
temBit := TBitmap.Create;
temBit.Width := bit1.Width;
temBit.Height := bit1.Height;
end;
nRe := 0;
for x := 0 to bit1.Width -1 do
begin
for y:= 0 to bit1.Height -1 do
begin
bx := GetBValue(bit1.Canvas.pixels[x,y]);
by := GetBValue(bit2.Canvas.pixels[x,y]);
bbs := abs(bx- by);
if bbs < nC then
begin
bColor := clBlack;
end else
begin
bColor := clWhite;
Inc(nRe);
end;
if Img <> nil then
temBit.Canvas.pixels[x,y]:= bColor;
end;
end;
if Img <> nil then
Img.Picture.Bitmap.Assign(temBit);
temBit.Free;
Result := nRe;
end;
//一种更快的方法
function Compare2(bit1: TBitmap; bit2: TBitmap; nC: Integer; Img: TImage): Integer;
var
x,y , nRe: Integer;
bbs: Byte;
bColor: TColor;
temBit: TBitmap;
pix1, pix2: PByteArray;
begin
if Img <> nil then
begin
temBit := TBitmap.Create;
temBit.Width := bit1.Width;
temBit.Height := bit1.Height;
end;
nRe := 0;
for y:= 0 to bit1.Height -1 do
begin
pix1 := bit1.Scanline[y];
pix2 := bit2.Scanline[y];
for x:= 0 to bit1.Width-1 do
begin
bbs := abs(pix1[x*3]- pix2[x*3]);
if bbs < nC then
begin
bColor := clBlack;
end else
begin
bColor := clWhite;
Inc(nRe);
end;
if Img <> nil then
temBit.Canvas.pixels[x,y]:= bColor;
end;
end;
if Img <> nil then
begin
Img.Picture.Bitmap.Assign(temBit);
temBit.Free;
end;
Result := nRe;
end;
取灰度值, 设置容差, 返回差度

![]()
安防 工控软件定制 QQ 2822八4536
浙公网安备 33010602011771号