delphi 网上获取北京时间验证码识别之中值滤波


验证码识别之中值滤波

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
 Button1: TButton;
 Image1: TImage;
 Image2: TImage;
 procedure Button1Click(Sender: TObject);
 procedure SelectionSort(var a: array of integer);

 private
 { Private declarations }
 public
 { Public declarations }
 end;

var
 Form1: TForm1;
 RvalueArray, GvalueArray, BvalueArray: array[0..8] of integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 bmp1, bmp2: Tbitmap;
 p1, p2, p3, p4: pbytearray;
 i, j: integer;
begin
 //设置双缓冲
 self.DoubleBuffered := true;
 //创建两个位图实例
 bmp1 := Tbitmap.Create;
 bmp2 := Tbitmap.Create;
 //加在位图
 bmp1.Assign(image1.Picture.Bitmap);
 //设置位图的象素格式
 bmp1.PixelFormat := pf24bit;
 //位图的大小
 bmp1.Width := image1.Picture.Graphic.Width;
 bmp1.Height := image1.Picture.Graphic.Height;
 //加载备份的位图
 bmp2.Assign(image1.Picture.Bitmap);
 bmp2.PixelFormat := pf24bit;
 for j := 1 to bmp1.Height - 2 do
 begin
 //三条扫描线
 p1 := bmp1.ScanLine[j];
 p2 := bmp2.ScanLine[j - 1];
 p3 := bmp2.ScanLine[j];
 p4 := bmp2.ScanLine[j + 1];
 for i := 1 to bmp1.Width - 2 do
 begin
 //对存储9个R分量的数组进行赋值
 RvalueArray[0] := p2[3 * (i - 1) + 2];
 RvalueArray[1] := p2[3 * i + 2];
 RvalueArray[2] := p2[3 * (i + 1) + 2];
 RvalueArray[3] := p3[3 * (i - 1) + 2];
 RvalueArray[4] := p3[3 * i + 2];
 RvalueArray[5] := p3[3 * (i + 1) + 2];
 RvalueArray[6] := p4[3 * (i - 1) + 2];
 RvalueArray[7] := p4[3 * i + 2];
 RvalueArray[8] := p4[3 * (i + 1) + 2];
 //调用排序过程
 SelectionSort(RvalueArray);
 //获取R分量的中间值
 p1[3 * i + 2] := RvalueArray[4];
 //对存储9个G分量的数组进行赋值
 GvalueArray[0] := p2[3 * (i - 1) + 1];
 GvalueArray[1] := p2[3 * i + 1];
 GvalueArray[2] := p2[3 * (i + 1) + 1];
 GvalueArray[3] := p3[3 * (i - 1) + 1];
 GvalueArray[4] := p3[3 * i + 1];
 GvalueArray[5] := p3[3 * (i + 1) + 1];
 GvalueArray[6] := p4[3 * (i - 1) + 1];
 GvalueArray[7] := p4[3 * i + 1];
 GvalueArray[8] := p4[3 * (i + 1) + 1];
 //调用选择排序
 SelectionSort(RvalueArray);
 //获取G分量的中间值
 p1[3 * i + 1] := RvalueArray[4];
 //对存储9个B分量的数组进行赋值
 BvalueArray[0] := p2[3 * (i - 1)];
 BvalueArray[1] := p2[3 * i];
 BvalueArray[2] := p2[3 * (i + 1)];
 BvalueArray[3] := p3[3 * (i - 1)];
 BvalueArray[4] := p3[3 * i];
 BvalueArray[5] := p3[3 * (i + 1)];
 BvalueArray[6] := p4[3 * (i - 1)];
 BvalueArray[7] := p4[3 * i];
 BvalueArray[8] := p4[3 * (i + 1)];
 //调用选择排序过程
 SelectionSort(RvalueArray);
 //获取G分量的中间值
 p1[3 * i] := RvalueArray[4];
 end;
 end;
 Image2.Picture.Bitmap.Assign(Bmp1);
 Bmp1.Free;
 bmp2.Free;
end;
//选择排序过程

procedure TForm1.SelectionSort(var a: array of integer);
var
 i, j, t: integer;
begin
 for i := low(a) to high(a) - 1 do
 for j := high(a) downto i + 1 do
 if a[i] > a[j] then
 begin
 //交换值(a[i], a[j], i, j);
 t := a[i];
 a[i] := a[j];
 a[j] := t;
 end;
end;

end.


联系电话:
020-00000000
联系电话:
020-00000000
联系电话:
020-12345678