RSS订阅 | 匿名投稿
您的位置:网站首页 > 图像 > 正文

Delphi图像二值化

作者:admin 来源: 日期:2016/1/26 22:03:14 人气: 标签:

验证码识别之图像二值化

unit Unit1;

interface

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ExtDlgs, StdCtrls, ExtCtrls, Buttons;

type
    TForm1 = class(TForm)
        Image1: TImage;
        Image2: TImage;
        Button1: TButton;
        Button2: TButton;
        OpenPictureDialog1: TOpenPictureDialog;
    BitBtn1: TBitBtn;
    SavePictureDialog1: TSavePictureDialog;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    private
        { Private declarations }
    public
        { Public declarations }
    end;

var
    Form1: TForm1;

implementation
uses math;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
    Self.OpenPictureDialog1.Filter := '*.bmp|*.bmp';
    if self.OpenPictureDialog1.Execute then
    begin
        Image1.Picture.Bitmap.LoadFromFile(OpenPictureDialog1.FileName);
    end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
    p: PByteArray;
    Gray, x, y: Integer;
    Bmp: TBitmap;
begin
    Bmp := TBitmap.Create;
    Bmp.Assign(Image1.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 > 128 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;
    Image2.Picture.Bitmap.Assign(Bmp);
    Bmp.Free;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
   Self.savepictureDialog1.Filter := '*.bmp|*.bmp';
    if self.savePictureDialog1.Execute then
    begin
        Image2.Picture.Bitmap.savetoFile(savePictureDialog1.FileName);
    end;
end;

end.

读完这篇文章后,您心情如何?
0
0
0
0
0
0
0
0
本文网址:
上一篇:Delphi旋转位图
下一篇:没有资料