WebBrowser控件上网页验证码图片识别教程葡萄娱乐场

  Bmp.Assign(Form1.Image1.Picture.Bitmap);//将image图片转为位图情势

procedure TForm1.BitBtn4Click(Sender: TObject);

  begin

end;

end;
原图:    葡萄娱乐场 1  
处理后:葡萄娱乐场 2 
 

手续一:获取网页中验证码图片的url地址

end;
原图:    葡萄娱乐场 3
处理后:葡萄娱乐场 4 

    begin

  Bmp.Assign(Form1.Image1.Picture.Bitmap);//将image图片转为位图方式

end;
原图:   葡萄娱乐场 5
处理后:葡萄娱乐场 6  

  Bmp: TBitmap;//位图组件(TBitMap)

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

  Bmp := TBitmap.Create;//构造建设多少个TBitmap

 步骤二:下载网页中验证码图片到image中 
在delphi中参预一个BitBtn和一个image以及WebBrowser控件,image用来显示下载的图样
代码:
procedure TForm1.BitBtn5Click(Sender: TObject);
var
  i:Integer;
  rang:IHTMLControlRange;
  s:string;
begin
try
  s := (IHTMLDocument2(WebBrowser.Document).images.item(‘img_validatecode’,EmptyParam) as
IHTMLElement).getAttribute(‘src’,0);
  rang:=((IHTMLDocument2(WebBrowser.Document).body as
HTMLBody).createControlRange)as IHTMLControlRange;
  rang.add(IHTMLDocument2(WebBrowser.Document).images.item(‘img_validatecode’,EmptyParam)as
IHTMLControlElement);
  rang.execCommand(‘Copy’,False,0);
 
Image1.Picture.Assign(clipboard);//若为参加Clipbrd单元,编写翻译时会提醒clipboard为定义
except
end;
end; 
注意:
1、在前后相继的uses中必需先出席ActiveX,Clipbrd单元,在那之中Clipbrd不加入会招致 clipboard未定义
2、img_validatecode 为网页验证码图片的id号,
3、上边代码为delphi WebBrowser中的通用代码,使用时只需修改id号和uses中
增添单元就能够使用

  end;

      Gray:=Max(Gray,p[3*x]);

  begin

  end;

      p[3*x+1]:=byte(Gray);

    end;

      p[3*x]:=byte(Gray);

    end;

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

     阈值的选拔关键分为两类:全局阈值和一部分阈值。
     全局阈值是对总体图像选取三个阈值进行划分,比方固定阈值法二值化、判别解析化二值化等;
     局地阈值是将图像分为几块,每一种子块选用差异的阈值;(具体有个别阈值法能够活动百度,这里不必过多解释)
代码:

  Bmp.Free;//释放TBitmap

  Gray: integer;//灰度值

  Gray: integer;//灰度值

        p[3*x]:=255;

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

      //图像二值化

    end;

  x,y: integer;//x宽,y高

 

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

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

  end;

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

  Bmp.PixelFormat := pf24bit; //设为24个人之彩色位图,PixelFormat
为位图的内部存款和储蓄器格式和颜色深浅,总共9个值

      p[3*x+2]:=byte(Gray);

  Bmp.Free;//释放TBitmap

 

      begin

    p :=Bmp.ScanLine[y];//ScanLine方法用于获取像素颜色值

      Gray:=Max(p[3*x+2],p[3*x+1]);  //使用max函数旭定义Math单元

        p[3*x]:=0;

      p[3*x+2]:=byte(Gray);

  p: pbyteArray;  //位指针

  Bmp.PixelFormat := pf24bit; //设为二十四个人之彩色位图,PixelFormat 为位图的内部存款和储蓄器格式和颜色深浅,总共9个值

    p :=Bmp.ScanLine[y];//ScanLine方法用于获取像素颜色值

  Bmp: TBitmap;//位图组件(TBitMap)

 方法三:**动用公式Y=0.299保时捷718+0.857G+0.113B**

  Bmp: TBitmap;//位图组件(TBitMap)

var

  end;

  for I:=0 to WebBrowser1.OleObject.document.images.length-1 do

  begin

  x,y: integer;//x宽,y高

      if Gray > 120 then//阈值为120

    p :=Bmp.ScanLine[y];//ScanLine方法用于获取像素颜色值

    p :=Bmp.ScanLine[y];//ScanLine方法用于获取像素颜色值

begin

var

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

  p: pbyteArray;  //位指针

      else

      end

  Bmp := TBitmap.Create;//建构一个TBitmap

     
Gray:=round(p[3*x+2]*0.3+p[3*x+1]*0.59+p[3*x]*0.11);//公式Y=0.299R+0.857G+0.113B

    Memo1.Lines.Add(WebBrowser1.OleObject.document.images.item(i).href);

   
  在对图像二值化在此以前需求对图像实行灰度管理,二值化原理:通过设定阈值(threshold),把灰度图像成为仅用0或1来表示图像目的和背景,当中图像指标相当多为数字,字母,设为1,;背景设为0。在位图中0对应0,1对应255,二值化方法比较多,不过最首借使介于对阈值的取舍。

  x,y: integer;//x宽,y高

  image4.Picture.Bitmap := Bmp;

  x,y: integer;//x宽,y高

      Gray:=(p[3*x+2]+p[3*x+1]+p[3*x]) div
3;//3处像素点的平均值

      end; 
//分割线————————————- 

procedure TForm1.BitBtn4Click(Sender: TObject);

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

begin

    begin

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

  Bmp := TBitmap.Create;//建设构造多个TBitmap

  p: pbyteArray;  //位指针

经验

var

    begin

  Bmp.Assign(Form1.Image1.Picture.Bitmap);//将image图片转为位图情势

begin

步骤四:image图片的二值化
 

  Bmp.Free;//释放TBitmap

  Bmp.PixelFormat := pf24bit; //设为二十二位之彩色位图,PixelFormat
为位图的内部存款和储蓄器格式和颜料深浅,总共9个值

    begin

方法二:
代码:

qq:673890989  
 款待有意思味的小同伴沟通

  Bmp.Assign(Form1.Image1.Picture.Bitmap);//将image图片转为位图方式

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

  Bmp: TBitmap;//位图组件(TBitMap)

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

      p[3*x+1]:=byte(Gray);

  Gray: integer;//灰度值

  image4.Picture.Bitmap := Bmp;

 手续三:image图片的灰度管理   首先我们须求领会图片的灰度管理是将有个别五彩缤纷的验证码图片产生珍珠白图片方便图片的存续管理,这里有几种方法对图纸张开青古铜色管理。
 方法一:求出EvoqueGB那三个像素点的平均值,然后把平均值分给八个像素点;
 方法二:求每种像素点XC90GB四个轻重的最大值,然后把最大值分给四个像素点;
 方法三:遵照YUV的颜色空间,求出Y的值;
 方法一:
 代码: 
 procedure TForm1.BitBtn4Click(Sender: TObject);

begin

      p[3*x+2]:=byte(Gray);

  Bmp.Free;//释放TBitmap

  Bmp.PixelFormat := pf24bit; //设为贰12个人之彩色位图,PixelFormat
为位图的内部存款和储蓄器格式和颜料深浅,总共9个值

  Gray: integer;//灰度值

     
Gray:=round(p[3*x+2]*0.3+p[3*x+1]*0.59+p[3*x]*0.11);//公式Y=0.299R+0.857G+0.113B

end;

      p[3*x]:=byte(Gray);

  I:Integer;

  begin

      begin

  image4.Picture.Bitmap := Bmp;

前后相继如下:
procedure TForm1.BitBtn1Click(Sender: TObject);

      p[3*x+1]:=byte(Gray);

  image4.Picture.Bitmap := Bmp;

 

在delphi中加入三个BitBtn和三个memo以及WebBrowser控件落成网页中验证码图片的url地址的获得

  Bmp := TBitmap.Create;//构造建设一个TBitmap

var

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

begin

    end;

原图:
  葡萄娱乐场 7
处理后:葡萄娱乐场 8
从功效图能够看出,图像二值化便是设定一个阈值,然后剖断每点的中华VGB值大于依旧小于阈值,大于则为255即深草绿,小于阈值则为0即藏青。

      p[3*x]:=byte(Gray);

procedure TForm1.BitBtn4Click(Sender: TObject);

var

  p: pbyteArray;  //位指针