delphi图像二值化  
官方Delphi 学习QQ群: 682628230(三千人)\n
频道

delphi图像二值化


验证码识别之图像二值化

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.

推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.05123496055603 seconds