java 去除干扰-ag凯发k8国际
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 }
以上代码只限于这类验证码
的干扰像素的去除 ,其他的验证码类型还待测试!
总结
以上是ag凯发k8国际为你收集整理的java 去除干扰_【selenium-webdriver实战篇】java丨验证码图片去除干扰像素,方便验证码的识别(转)...的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: vue中页面跳转传值_vue跳转方式(打
- 下一篇: klearn 文本分类_使用gensim