java 去除干扰_【Selenium-WebDriver实战篇】Java丨验证码图片去除干扰像素,方便验证码的识别(转)...

1、先来看看效果:

原图

除去干扰像素后

2、解析代码:

1)、读取文件夹里面的图片

1 String fileName = "picture";

2 BufferedImage img = ImageIO.read(new File("img//"+fileName+".jpg"));

2)、获取图片的宽度和高度

1 int width = img.getWidth();

2 int height = img.getHeight();

3)、循环执行除去干扰像素

按 Ctrl+C 复制代码

按 Ctrl+C 复制代码

4)、图片背景变黑,验证码变白色

按 Ctrl+C 复制代码

按 Ctrl+C 复制代码

5)、保存图片

1      File file = new File("img\\temp\\"+fileName+".jpg");

2 if (!file.exists())

3 {

4 File dir = file.getParentFile();

5 if (!dir.exists())

6 {

7 dir.mkdirs();

8 }

9 try

10 {

11 file.createNewFile();

12 }

13 catch (IOException e)

14 {

15 e.printStackTrace();

16 }

17 }

18 ImageIO.write(img, "jpg", file);

3、重要代码:

BufferedImage img = ImageIO.read(new File("img//"+fileName+".jpg"));

Color color1 = new Color(img.getRGB(i, 1));

int num1 = color1.getRed()+color1.getGreen()+color1.getBlue();

getRed()、getGreen()、getBlue()这三个方法分别是获取图片每一个像素的三原色(注释:每一种颜色都是由红、绿、蓝组成的)

4、原理:

1)、获取图片的高度和宽度

2)、循环获取图片的每一个像素的值

3)、把每一排的像素值用来作为对比的标准从而替代颜色相同的为白色(横向和纵向都可以循环一次,这里我只循环了横向的像素)

4)、循环获取像素,替代验证码背景为黑色(在这个步骤验证码的背景已经是白色的,数字的颜色还没有替换,所以我们循环一次把白色换为黑色,不是白色的换成白色)

5、所有代码:

1 package com.haojieli.main;

2

3 import java.awt.Color;

4 import java.awt.image.BufferedImage;

5 import java.io.File;

6 import java.io.IOException;

7

8 import javax.imageio.ImageIO;

9

10 public class PictureRemove {

11

12 public static void main(String[] args) throws IOException {

13 //读取文件夹里面的图片

14 String fileName = "picture";

15 BufferedImage img = ImageIO.read(new File("img//"+fileName+".jpg"));

16 //获取图片的高宽

17 int width = img.getWidth();

18 int height = img.getHeight();

19

20 //循环执行除去干扰像素

21 for(int i = 1;i < width;i++){

22 Color colorFirst = new Color(img.getRGB(i, 1));

23 int numFirstGet = colorFirst.getRed()+colorFirst.getGreen()+colorFirst.getBlue();

24 for (int x = 0; x < width; x++)

25 {

26 for (int y = 0; y < height; y++)

27 {

28 Color color = new Color(img.getRGB(x, y));

29 System.out.println("red:"+color.getRed()+" | green:"+color.getGreen()+" | blue:"+color.getBlue());

30 int num = color.getRed()+color.getGreen()+color.getBlue();

31 if(num >= numFirstGet){

32 img.setRGB(x, y, Color.WHITE.getRGB());

33 }

34 }

35 }

36 }

37

38 //图片背景变黑色

39 for(int i = 1;i

40 Color color1 = new Color(img.getRGB(i, 1));

41 int num1 = color1.getRed()+color1.getGreen()+color1.getBlue();

42 for (int x = 0; x < width; x++)

43 {

44 for (int y = 0; y < height; y++)

45 {

46 Color color = new Color(img.getRGB(x, y));

47 System.out.println("red:"+color.getRed()+" | green:"+color.getGreen()+" | blue:"+color.getBlue());

48 int num = color.getRed()+color.getGreen()+color.getBlue();

49 if(num==num1){

50 img.setRGB(x, y, Color.BLACK.getRGB());

51 }else{

52 img.setRGB(x, y, Color.WHITE.getRGB());

53 }

54 }

55 }

56 }

57 //保存图片

58 File file = new File("img\\temp\\"+fileName+".jpg");

59 if (!file.exists())

60 {

61 File dir = file.getParentFile();

62 if (!dir.exists())

63 {

64 dir.mkdirs();

65 }

66 try

67 {

68 file.createNewFile();

69 }

70 catch (IOException e)

71 {

72 e.printStackTrace();

73 }

74 }

75 ImageIO.write(img, "jpg", file);

76 }

77 }

以上代码只限于这类验证码

的干扰像素的去除 ,其他的验证码类型还待测试!


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部