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;
    

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

  • 相关阅读:
    数据库连接JOIN
    Java面试金典
    Collections.sort详解
    Java复合优先于继承
    js算术运算符与数据类型转换
    js数组类型
    js对象类型
    CSS-API(CSS编程接口),CSSOM(css对象模型)
    从零开始--单片机十字路口交通灯控制实验
    matlab用双重循环实现费诺编码
  • 原文地址:https://www.cnblogs.com/doorsky/p/2277771.html
Copyright © 2011-2022 走看看