参考地址:https://www.cnblogs.com/haojieli/p/6212627.html

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<width;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 }
以上代码只限于这类验证码  的干扰像素的去除 ,其他的验证码类型还待测试!

【Selenium-WebDriver实战篇】Java丨验证码图片去除干扰像素,方便验证码的识别(转)的更多相关文章

  1. Java丨验证码图片去除干扰像素,方便验证码的识别

    1.先来看看效果: 原图 除去干扰像素后 2.解析代码: 1).读取文件夹里面的图片 String fileName = "picture"; BufferedImage img ...

  2. java selenium webdriver实战 seleniumIDE

    Selenium是ThoughtWorks公司,一个名为Jason Huggins的测试为了减少手工测试的工作量,自己实现的一套基于Javascript语言的代码库 使用这套库可以进行页面的交互操作, ...

  3. selenium webdriver 环境搭建--java

    selenium java环境的安装可以分为三个部分:jdk.eclipse和selenium. jdk jdk(java development kit)是sun公司针对java开发人员的产品,是整 ...

  4. 《一头扎进》系列之Python+Selenium框架实战篇7 - 年底升职加薪,年终奖全靠它!Merry Christmas

    1. 简介 截止到上一篇文章为止,框架基本完全搭建完成.那么今天我们要做什么呢????聪明如你的小伙伴或者是童鞋一定已经猜到了,都测试完了,当然是要生成一份高端大气上档次的测试报告了.没错的,今天宏哥 ...

  5. J2EE如何生成验证码图片和点击刷新验证码

    验证码图片生成步骤 创建BufferedImage对象. 获取BufferedImage的画笔,即调用getGraphics()方法获取Graphics对象. 调用Graphics对象的setColo ...

  6. [转]java selenium webdriver实战 应用小结

    原文链接:http://www.cnblogs.com/itliucheng/p/5578788.html 部分api 1.访问网站 driver.get("http://www.baidu ...

  7. java selenium webdriver实战 应用小结

    部分api 1.访问网站 driver.get("http://www.baidu.com"); 或者 driver.navigate().to("http://www. ...

  8. java selenium webdriver实战 helloWord

    第一步:建立Maven项目 Selenium 支持 maven 工程,这会让你的工作更加简便. 用 Eclipse 建个 Maven 的工程,建成后,修改 pom.xml <dependenci ...

  9. java selenium webdriver实战 页面元素定位

    自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...

随机推荐

  1. Vue项目引入百度地图

    先去百度开放平台申请ak.http://lbsyun.baidu.com/ 进来之后 按照步骤走,先登录百度账号,然后申请成为开发者,然后申请ak密钥 填写完毕后提交,会给你邮箱发个激活邮件 点击申请 ...

  2. IIS提速的几个优化

    一.内存池右键高级设置 1.设置队列5000 2.设置固定回收时间 3.设置空闲时间Suspend 二.网站右键高级设置 1.启用预加载

  3. django+uWSGI+nginx的工作原理流程与部署过程

    django+uWSGI+nginx的工作原理流程与部署过程 一.前言 知识的分享,不应该只是展示出来,还应该解释这样做是为什么... 献给和我一样懵懂中不断汲取知识,进步的人们. 授人与鱼,不如授人 ...

  4. [笔记] 命令行参数 int main(int argc,char *argv[])

    int main(int argc,char *argv[]) // argument count 变量个数 argument values 变量值 C程序的main函数有两个形参* argc:整数, ...

  5. DS 图解堆排

    堆排其实就是选择排序,只不过用了完全二叉树特性. 堆排思想 : 利用完全二叉树特性建堆和重复选择调整来得到有序数组. 完全二叉树有什么特性呢? 节点左对齐 ---> 层序遍历不会出现空,可以用数 ...

  6. 全栈项目|小书架|服务器端-NodeJS+Koa2 实现评论功能

    评论功能分析 上图可以看出评论功能主要实现了:评论的发布.评论列表的展示. 在不考虑子评论以及图片评论的场景下,评论功能主要有以下两个接口: 发布评论 获取评论列表(考虑分页) 评论 Model 的建 ...

  7. 《JAVA高并发编程详解》-程序可能出现死锁的场景

  8. .Net Core WebApi(3)—NLog

    在.Net Core中,微软提供的内置的日志组件没有实现将日志记录到文件.数据库上.这里使用NLog替代内置的日志组件 1.在项目中引入NuGet包   NLog         NLog.Web.A ...

  9. 1005 继续(3n+1)猜想(C#)

    一.题目内容: 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对 n= ...

  10. iOS - FlexBox 布局之 YogaKit

    由于刚开始的项目主要用的H5.javaScript技术为主原生开发为辅的手段开发的项目,UI主要是还是H5,如今翻原生.为了方便同时维护两端.才找到这个很不错的库. FlexBox?听起来像是一门H5 ...