level 3
理想影子
楼主
代码很搓,就是实验,Delphi我也不是很熟。
(一) 去干扰线
首先,验证码图片是这样子的,28像素高。100像素宽,有干扰线(还与文字同色的),干扰点。随机颜色,随机旋转角度

首先,我尝试去干扰线,通过函数的形式计算破坏红色数字的完整性,我采用遍历单列,如果列里有只有2个红色像素点的话,就变成白色去除红色 判断颜色我使用的是RGB中R的值大于153,就是包括暗红
procedure TForm1.GRedLineBMP(BMP:TBITMAP);
var
i,j,x,y,co,n:integer;
p: PByteArray;
begin
Bmp.PixelFormat := pf24Bit;
randomize;
for i := 0 to BMP.Width - 1 do
begin
for j := 0 to BMP.Height - 1 do
begin
p := Bmp.scanline[j];
if p[i * 3+2]>=153 then //如果红色值大于153
begin
co:=0;
for n := 0 to BMP.Height - 1 do
begin
if Colorflag(BMP.Canvas.Pixels[i, n]) =1 then
begin
co:=co+1;
end;
end;
if(co<=2) then
BMP.Canvas.Pixels[i, j] := clwhite
else
begin
end;
end;
end;
end;
end;
效果是这样的



因为我发现随机噪点颜色是固定的,我就提前把噪点颜色给clwhite了
后面这个是因为随机干扰线在文字上方,就不处理了,应该不会有太大影响吧。
2014年10月24日 04点10分
1
(一) 去干扰线
首先,验证码图片是这样子的,28像素高。100像素宽,有干扰线(还与文字同色的),干扰点。随机颜色,随机旋转角度
首先,我尝试去干扰线,通过函数的形式计算破坏红色数字的完整性,我采用遍历单列,如果列里有只有2个红色像素点的话,就变成白色去除红色 判断颜色我使用的是RGB中R的值大于153,就是包括暗红procedure TForm1.GRedLineBMP(BMP:TBITMAP);
var
i,j,x,y,co,n:integer;
p: PByteArray;
begin
Bmp.PixelFormat := pf24Bit;
randomize;
for i := 0 to BMP.Width - 1 do
begin
for j := 0 to BMP.Height - 1 do
begin
p := Bmp.scanline[j];
if p[i * 3+2]>=153 then //如果红色值大于153
begin
co:=0;
for n := 0 to BMP.Height - 1 do
begin
if Colorflag(BMP.Canvas.Pixels[i, n]) =1 then
begin
co:=co+1;
end;
end;
if(co<=2) then
BMP.Canvas.Pixels[i, j] := clwhite
else
begin
end;
end;
end;
end;
end;
效果是这样的

因为我发现随机噪点颜色是固定的,我就提前把噪点颜色给clwhite了后面这个是因为随机干扰线在文字上方,就不处理了,应该不会有太大影响吧。


