zoukankan      html  css  js  c++  java
  • 简单的图片对比函数

    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;
    

    取灰度值, 设置容差, 返回差度

  • 相关阅读:
    javascript内存泄漏
    闭包
    JavaScript 数组(Array)对象
    什么是跨域?跨域请求资源的方法有哪些?
    理解闭包
    比较typeof与instanceof
    js 字符串操作函数
    js去除字符串空格
    Thematic002.字符串专题
    Thematic001.数论专题
  • 原文地址:https://www.cnblogs.com/doorsky/p/2277771.html
Copyright © 2011-2022 走看看