频道分类

Delphi 图像二值化

作者:admin 来源: 日期:2020/1/31 18:51:03 人气: 标签:

 

uses

  Vcl.Imaging.pngimage, Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,

  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,

  Vcl.ExtCtrls, Vcl.ComCtrls;

  

procedure TForm1.btn_erzhihuaClick(Sender: TObject);

var

  p: PByteArray;

  Gray, x, y: Integer;

  Bmp: TBitmap;

begin

 

  Bmp := TBitmap.Create;

  Bmp.Assign(img1.Picture.Bitmap);

    //设置为24位真彩色

  Bmp.PixelFormat := pf24Bit;

  randomize;

 

  for y := 0 to Bmp.Height - 1 do

  begin

    p := Bmp.scanline[y];

    for x := 0 to Bmp.Width - 1 do

    begin

 

      //一个象素点三个字节

      Gray := Round(p[x * 3 + 2] * 0.3 + p[x * 3 + 1] * 0.59 + p[x * 3] * 0.11);

      if Gray > 120 then //全局阀值128

      begin

        p[x * 3] := 255;

        p[x * 3 + 1] := 255;

        p[x * 3 + 2] := 255;

      end

      else

      begin

        p[x * 3] := 0;

        p[x * 3 + 1] := 0;

        p[x * 3 + 2] := 0;

      end;

    end;

  end;

  ClearPicNoise(Bmp, 2);

  img2.Picture.Bitmap.Assign(Bmp);

  Bmp.Free;

end;

来源:http://www.coder163.com/language/delphi/