• 简单的图片对比函数


    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;
    

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

  • 相关阅读:
    在没有源代码的情况下调试JAR包..
    Flex游戏篇——游戏开发概述
    CSDN、sina博客在Zoundry中登记的API URL 收藏
    标准博客 API .BLOG APIS
    SAXParseException An invalid XML character 问题的解决
    分布式存储方法
    拨号720错误解决记.txt
    xxx
    硬盘分区后的逻辑结构
    paip sms to blog.txt
  • 原文地址:https://www.cnblogs.com/doorsky/p/2277771.html
Copyright © 2020-2023  润新知