Java简单验证码识别(附源码)
来源:互联网 发布:python exit status 2 编辑:程序博客网 时间:2024/06/14 18:17
学习目的:熟悉java类集与IO流操作,熟悉图像基本知识
可识别的图形:
该验证码下载网址为:http://www.quanjing.com/createImg.aspx
(这个验证码可以采集,在我上一篇http://blog.csdn.net/q651742112/article/details/76177275有源代码)
思路:这个验证码比较规则,数字都是显示在固定的区域,数字也无粘连,实现步骤如下
1.对图像进行分割,分割成一个图像显示一个数字
2.对每个图像进行灰化处理,就是设置一个阈值将他们变成黑白图片
3.建立一个标准的数字图像库
4.将每个被分割的小图片与标准库比较,像素点重合最多的就是该数字
下面是简单界面
识别界面:
截取关键源代码如下(文末有详细的项目下载地址和可打开exe文件):
注意事项:1.标准图像库是对分割的小图片一个一个像素点操作建立的
2.路径不懂的地方可参考我的上一篇文章
package stringText;import java.awt.Color;import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.color.ColorSpace;import java.awt.image.BufferedImage;import java.awt.image.ColorConvertOp;import java.awt.image.ImageObserver;import java.awt.image.ImageProducer;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.URL;import java.net.URLDecoder;import java.util.ArrayList;import java.util.Calendar;import java.util.GregorianCalendar;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.imageio.ImageIO;import javax.imageio.stream.FileImageInputStream;import javax.print.attribute.standard.RequestingUserName;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JPanel;public class temp extends JPanel { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub System.out.println("请选择你要识别的图片:");// temp st = new temp(); // 实例化本类的一个对象 File file = st.getFile(); // 调用函数来获取要识别文件的路径 String path = file.getAbsolutePath(); // 获取要识别文件的绝对路径 BufferedImage image; // 存储要识别的图片 int result[] = new int[4];// 存储识别的结果 copyStandardImg();// 将参考的标准图片复制到D:\image\VerificationCode\temp result = discernImg(path); // 识别图片,返回数字给数组 System.out.print("识别的结果为:"); for (int i = 0; i < 4; i++) { // 输出结果 System.out.print(result[i]); } } /** * 从外部读取文件地址 * * @return */ public File getFile() { JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); int returnVal = fc.showOpenDialog(this); File fileChoosed = fc.getSelectedFile(); return fileChoosed; } /** * 将验证码参考的标准图片复制到D:\image\VerificationCode\temp目录下 * * @throws IOException */ public static void copyStandardImg() throws IOException { File sf = new File("d:\\image\\VerificationCode\\temp\\");// 创建保存标准图片的文件夹 if (!sf.exists()) { // 如果不存在则创建 sf.mkdirs(); } temp st = new temp(); // 实例化本类的一个对象 for (int i = 0; i < 10; i++) { String s = i + ".gif"; // 设置文件名 InputStream is = st.getClass().getResourceAsStream("/image/" + s); // 读取包里面的文件流 // 1K的数据缓冲 byte[] bs = new byte[1024]; // 读取到的数据长度 int len; OutputStream os = new FileOutputStream(sf.getPath() + "\\" + s); // 新建输出文件 while ((len = is.read(bs)) != -1) { os.write(bs, 0, len); // 将输出流写到文件 } } } /** * 传入要识别的图片,返回识别的数字 */ public static int[] discernImg(String imgPath) { int result[] = new int[4]; // 保存结果的数组 try { BufferedImage image; // 用来保存图片 image = ImageIO.read(new File(imgPath)); // 读取图片 List<BufferedImage> bufImgList = new ArrayList<BufferedImage>(); // 保存分割的图片 bufImgList = splitImage(image); // 分割图片 for (int i = 0; i < 4; i++) { bufImgList.set(i, removeBackgroudMin(bufImgList.get(i))); // 对每张图片灰度化 result[i] = decideImgNumber(bufImgList.get(i)); // 识别每张小图的数字 } } catch (Exception e) { // TODO: handle exception } return result; } /** * 分割图片,并返回图片列表 * * @param img * @return * @throws Exception */ public static List<BufferedImage> splitImage(BufferedImage img) throws Exception { List<BufferedImage> subImgs = new ArrayList<BufferedImage>(); subImgs.add(img.getSubimage(7, 5, 9, 12));// 截取的起始坐标,图片大小为9x12,起始坐标为(7,5) subImgs.add(img.getSubimage(16, 5, 9, 12)); subImgs.add(img.getSubimage(25, 5, 9, 12)); subImgs.add(img.getSubimage(34, 5, 9, 12)); return subImgs; } /** * 预处理验证码图片,小图片变为黑白 * * @param picFile * @return * @throws Exception */ public static BufferedImage removeBackgroudMin(BufferedImage img) throws Exception { int width = img.getWidth(); // 获取图片的高度与宽度 int height = img.getHeight(); for (int x = 0; x < height; ++x) { for (int y = 0; y < width; ++y) { if (isWhite(img.getRGB(y, x)) == 1) { // 判断该设为白色则设为白色 img.setRGB(y, x, Color.WHITE.getRGB()); // 设为白色 } else { img.setRGB(y, x, Color.BLACK.getRGB()); // 设为黑色 } } } return img; } /** * 保存图片(可指定保存文件路径和文件名) * * @param bufImg * @param savePath * @param saveName */ public static void saveImage(BufferedImage bufImg, String savePath, String saveName) { try { int width = bufImg.getWidth(); // 获取传入图片的宽度 int height = bufImg.getHeight();// 获取传入图片的高度 Graphics g = bufImg.getGraphics();// 再创建一个Graphics变量,用来画出来要保持的图片,及上面传递过来的Image变量 g.drawImage(bufImg, 0, 0, null); // 绘制图片到新建的图片 ImageIO.write(bufImg, "gif", new File(savePath + saveName));// 将BufferedImage变量写入文件中。 } catch (Exception e) { // TODO: handle exception } } /** * 预处理验证码图片,小图片变为黑白 * * @param picFile * @return * @throws Exception */ public static BufferedImage removeBackgroudMin(String picFile) throws Exception { BufferedImage img = ImageIO.read(new File(picFile)); int width = img.getWidth(); int height = img.getHeight(); for (int x = 0; x < height; ++x) { for (int y = 0; y < width; ++y) { if (isWhite(img.getRGB(y, x)) == 1) { img.setRGB(y, x, Color.WHITE.getRGB()); } else { img.setRGB(y, x, Color.BLACK.getRGB()); } } } return img; } public static int isBlack(int colorInt) { Color color = new Color(colorInt); // 实例化颜色类 if (color.getRed() + color.getGreen() + color.getBlue() <= 100) {// 设置阈值,来判断该像素是否是黑色 return 1; // 是白色则返回1 } return 0;// 不是白色,则返回0 } /** * 判断当前像素点的颜色是否是白色 * * @param colorInt * @return */ public static int isWhite(int colorInt) { Color color = new Color(colorInt); // 实例化颜色类 if (color.getRed() + color.getGreen() + color.getBlue() > 450) {// 设置阈值,来判断该像素是否是黑色 return 1; // 是白色则返回1 } return 0; // 不是白色则返回0 } /** * 根据像素点RGB的值来返回像素点各值之和 */ public static int getRgbalue(int colorInt) { Color color = new Color(colorInt); // 实例化颜色类 if ((color.getRed() + color.getGreen() + color.getBlue() > 0)) return 0;// 设置阈值,来判断该像素是否是黑色 return 1; } /** * 绘制数字像素标准模版,通过对被分割和灰话的图片进行更改(临时函数) * * @throws IOException */ public static void drawStandardTemplate(int n) throws IOException { int width = 9; // 获取传入图片的宽度 int height = 12;// 获取传入图片的高度 BufferedImage standardPicture; // BufferedImage standardPicture1 = new BufferedImage(width, height, // BufferedImage.TYPE_3BYTE_BGR); // 新建处理后的图片 // Graphics g = standardPicture1.getGraphics();// // 再创建一个Graphics变量,用来画出来要保持的图片,及上面传递过来的Image变量 // g.drawImage(standardPicture1, 0, 0, null); // 绘制图片到新建的图片 switch (n) { case 0: { standardPicture = ImageIO.read(new File("d:\\image\\VerificationCode\\2017年6月27日17时20分第4张.gif")); File sf = new File("d:\\image\\VerificationCode\\standard\\0.gif"); if (!sf.exists()) { sf.mkdirs(); } standardPicture.setRGB(5, 0, Color.WHITE.getRGB()); standardPicture.setRGB(6, 0, Color.WHITE.getRGB()); standardPicture.setRGB(6, 1, Color.WHITE.getRGB()); standardPicture.setRGB(0, 2, Color.BLACK.getRGB()); standardPicture.setRGB(3, 2, Color.WHITE.getRGB()); standardPicture.setRGB(2, 6, Color.WHITE.getRGB()); standardPicture.setRGB(3, 8, Color.WHITE.getRGB()); standardPicture.setRGB(6, 10, Color.WHITE.getRGB()); standardPicture.setRGB(5, 11, Color.WHITE.getRGB()); standardPicture.setRGB(8, 11, Color.WHITE.getRGB()); // for (int x = 0; x < width; ++x) { // for (int y = 0; y < height; ++y) { // // standardPicture.setRGB(x, y, Color.WHITE.getRGB()); // } // } ImageIO.write(standardPicture, "gif", new File("d:\\image\\VerificationCode\\standard\\0.gif"));// 将BufferedImage变量写入文件中。 } break; case 1: { standardPicture = ImageIO.read(new File("d:\\image\\VerificationCode\\2017年6月27日17时20分第3张验证码分割12.gif")); File sf = new File("d:\\image\\VerificationCode\\standard\\1.gif"); if (!sf.exists()) { sf.mkdirs(); } standardPicture.setRGB(5, 0, Color.BLACK.getRGB()); standardPicture.setRGB(2, 1, Color.BLACK.getRGB()); standardPicture.setRGB(8, 1, Color.WHITE.getRGB()); standardPicture.setRGB(5, 2, Color.BLACK.getRGB()); standardPicture.setRGB(8, 2, Color.WHITE.getRGB()); standardPicture.setRGB(5, 3, Color.BLACK.getRGB()); standardPicture.setRGB(5, 4, Color.BLACK.getRGB()); standardPicture.setRGB(3, 5, Color.BLACK.getRGB()); standardPicture.setRGB(5, 5, Color.BLACK.getRGB()); standardPicture.setRGB(5, 6, Color.BLACK.getRGB()); standardPicture.setRGB(3, 7, Color.BLACK.getRGB()); standardPicture.setRGB(7, 8, Color.WHITE.getRGB()); standardPicture.setRGB(0, 9, Color.WHITE.getRGB()); standardPicture.setRGB(3, 9, Color.BLACK.getRGB()); standardPicture.setRGB(5, 10, Color.BLACK.getRGB()); standardPicture.setRGB(3, 11, Color.BLACK.getRGB()); standardPicture.setRGB(5, 11, Color.BLACK.getRGB()); // for (int x = 0; x < width; ++x) { // for (int y = 0; y < height; ++y) { // // standardPicture.setRGB(x, y, Color.WHITE.getRGB()); // } // } ImageIO.write(standardPicture, "gif", new File("d:\\image\\VerificationCode\\standard\\1.gif"));// 将BufferedImage变量写入文件中。 } break; case 2: { standardPicture = ImageIO.read(new File("d:\\image\\VerificationCode\\2017年6月27日17时20分第3张验证码分割10.gif")); File sf = new File("d:\\image\\VerificationCode\\standard\\"); if (!sf.exists()) { sf.mkdirs(); } standardPicture.setRGB(1, 0, Color.WHITE.getRGB()); standardPicture.setRGB(5, 0, Color.WHITE.getRGB()); standardPicture.setRGB(6, 0, Color.WHITE.getRGB()); standardPicture.setRGB(7, 0, Color.WHITE.getRGB()); standardPicture.setRGB(7, 4, Color.WHITE.getRGB()); standardPicture.setRGB(2, 5, Color.WHITE.getRGB()); standardPicture.setRGB(2, 6, Color.WHITE.getRGB()); standardPicture.setRGB(7, 7, Color.WHITE.getRGB()); standardPicture.setRGB(7, 8, Color.WHITE.getRGB()); // for (int x = 0; x < width; ++x) { // for (int y = 0; y < height; ++y) { // // standardPicture.setRGB(x, y, Color.WHITE.getRGB()); // } // } ImageIO.write(standardPicture, "gif", new File("d:\\image\\VerificationCode\\standard\\2.gif"));// 将BufferedImage变量写入文件中。 } break; case 3: { standardPicture = ImageIO.read(new File("d:\\image\\VerificationCode\\2017年6月27日17时20分第3张验证码分割14.gif")); File sf = new File("d:\\image\\VerificationCode\\standard\\"); if (!sf.exists()) { sf.mkdirs(); } standardPicture.setRGB(5, 0, Color.WHITE.getRGB()); standardPicture.setRGB(7, 0, Color.WHITE.getRGB()); standardPicture.setRGB(6, 0, Color.WHITE.getRGB()); standardPicture.setRGB(7, 0, Color.WHITE.getRGB()); standardPicture.setRGB(6, 3, Color.BLACK.getRGB()); standardPicture.setRGB(1, 5, Color.WHITE.getRGB()); standardPicture.setRGB(2, 5, Color.WHITE.getRGB()); standardPicture.setRGB(6, 5, Color.BLACK.getRGB()); standardPicture.setRGB(1, 6, Color.WHITE.getRGB()); standardPicture.setRGB(2, 6, Color.WHITE.getRGB()); standardPicture.setRGB(3, 6, Color.WHITE.getRGB()); standardPicture.setRGB(7, 7, Color.WHITE.getRGB()); standardPicture.setRGB(1, 8, Color.WHITE.getRGB()); standardPicture.setRGB(7, 8, Color.WHITE.getRGB()); standardPicture.setRGB(2, 9, Color.WHITE.getRGB()); standardPicture.setRGB(0, 10, Color.WHITE.getRGB()); standardPicture.setRGB(1, 11, Color.WHITE.getRGB()); // for (int x = 0; x < width; ++x) { // for (int y = 0; y < height; ++y) { // // standardPicture.setRGB(x, y, Color.WHITE.getRGB()); // } // } ImageIO.write(standardPicture, "gif", new File("d:\\image\\VerificationCode\\standard\\3.gif"));// 将BufferedImage变量写入文件中。 } break; case 4: { standardPicture = ImageIO.read(new File("d:\\image\\VerificationCode\\2017年6月27日17时20分第3张验证码分割15.gif")); File sf = new File("d:\\image\\VerificationCode\\standard\\"); if (!sf.exists()) { sf.mkdirs(); } standardPicture.setRGB(3, 0, Color.WHITE.getRGB()); standardPicture.setRGB(1, 1, Color.WHITE.getRGB()); standardPicture.setRGB(2, 1, Color.WHITE.getRGB()); standardPicture.setRGB(3, 1, Color.BLACK.getRGB()); standardPicture.setRGB(8, 1, Color.WHITE.getRGB()); standardPicture.setRGB(1, 2, Color.WHITE.getRGB()); standardPicture.setRGB(2, 2, Color.WHITE.getRGB()); standardPicture.setRGB(0, 3, Color.WHITE.getRGB()); standardPicture.setRGB(2, 3, Color.BLACK.getRGB()); standardPicture.setRGB(7, 3, Color.WHITE.getRGB()); standardPicture.setRGB(8, 3, Color.WHITE.getRGB()); standardPicture.setRGB(0, 4, Color.WHITE.getRGB()); standardPicture.setRGB(4, 4, Color.WHITE.getRGB()); standardPicture.setRGB(0, 5, Color.BLACK.getRGB()); standardPicture.setRGB(3, 5, Color.WHITE.getRGB()); standardPicture.setRGB(0, 9, Color.WHITE.getRGB()); standardPicture.setRGB(1, 11, Color.WHITE.getRGB()); // for (int x = 0; x < width; ++x) { // for (int y = 0; y < height; ++y) { // // standardPicture.setRGB(x, y, Color.WHITE.getRGB()); // } // } ImageIO.write(standardPicture, "gif", new File("d:\\image\\VerificationCode\\standard\\4.gif"));// 将BufferedImage变量写入文件中。 } break; case 5: { standardPicture = ImageIO.read(new File("d:\\image\\VerificationCode\\2017年6月27日17时20分第3张验证码分割13.gif")); File sf = new File("d:\\image\\VerificationCode\\standard\\"); if (!sf.exists()) { sf.mkdirs(); } standardPicture.setRGB(0, 2, Color.BLACK.getRGB()); standardPicture.setRGB(0, 3, Color.BLACK.getRGB()); standardPicture.setRGB(0, 4, Color.BLACK.getRGB()); standardPicture.setRGB(5, 4, Color.WHITE.getRGB()); standardPicture.setRGB(6, 5, Color.WHITE.getRGB()); standardPicture.setRGB(0, 6, Color.WHITE.getRGB()); standardPicture.setRGB(1, 6, Color.WHITE.getRGB()); standardPicture.setRGB(0, 5, Color.WHITE.getRGB()); standardPicture.setRGB(5, 5, Color.BLACK.getRGB()); standardPicture.setRGB(5, 7, Color.BLACK.getRGB()); // for (int x = 0; x < width; ++x) { // for (int y = 0; y < height; ++y) { // // standardPicture.setRGB(x, y, Color.WHITE.getRGB()); // } // } ImageIO.write(standardPicture, "gif", new File("d:\\image\\VerificationCode\\standard\\5.gif"));// 将BufferedImage变量写入文件中。 } break; case 6: { standardPicture = ImageIO.read(new File("d:\\image\\VerificationCode\\2017年6月27日17时20分第3张.gif")); File sf = new File("d:\\image\\VerificationCode\\standard\\"); if (!sf.exists()) { sf.mkdirs(); } standardPicture.setRGB(8, 1, Color.WHITE.getRGB()); standardPicture.setRGB(8, 6, Color.WHITE.getRGB()); standardPicture.setRGB(2, 8, Color.WHITE.getRGB()); standardPicture.setRGB(7, 9, Color.WHITE.getRGB()); standardPicture.setRGB(6, 10, Color.WHITE.getRGB()); standardPicture.setRGB(7, 10, Color.WHITE.getRGB()); standardPicture.setRGB(8, 10, Color.WHITE.getRGB()); // for (int x = 0; x < width; ++x) { // for (int y = 0; y < height; ++y) { // // standardPicture.setRGB(x, y, Color.WHITE.getRGB()); // } // } ImageIO.write(standardPicture, "gif", new File("d:\\image\\VerificationCode\\standard\\6.gif"));// 将BufferedImage变量写入文件中。 } break; case 7: { standardPicture = ImageIO.read(new File("d:\\image\\VerificationCode\\2017年6月27日17时20分第3张验证码分割16.gif")); File sf = new File("d:\\image\\VerificationCode\\standard\\"); if (!sf.exists()) { sf.mkdirs(); } standardPicture.setRGB(7, 0, Color.WHITE.getRGB()); standardPicture.setRGB(3, 1, Color.BLACK.getRGB()); standardPicture.setRGB(8, 4, Color.WHITE.getRGB()); standardPicture.setRGB(5, 5, Color.WHITE.getRGB()); standardPicture.setRGB(5, 8, Color.WHITE.getRGB()); standardPicture.setRGB(6, 8, Color.WHITE.getRGB()); standardPicture.setRGB(0, 9, Color.WHITE.getRGB()); standardPicture.setRGB(1, 9, Color.WHITE.getRGB()); standardPicture.setRGB(5, 9, Color.WHITE.getRGB()); standardPicture.setRGB(6, 9, Color.WHITE.getRGB()); // for (int x = 0; x < width; ++x) { // for (int y = 0; y < height; ++y) { // // standardPicture.setRGB(x, y, Color.WHITE.getRGB()); // } // } ImageIO.write(standardPicture, "gif", new File("d:\\image\\VerificationCode\\standard\\7.gif"));// 将BufferedImage变量写入文件中。 } break; case 8: { standardPicture = ImageIO.read(new File("d:\\image\\VerificationCode\\2017年6月27日17时20分第1张.gif")); File sf = new File("d:\\image\\VerificationCode\\standard\\8.gif"); if (!sf.exists()) { sf.mkdirs(); } standardPicture.setRGB(0, 1, Color.WHITE.getRGB()); standardPicture.setRGB(1, 2, Color.BLACK.getRGB()); standardPicture.setRGB(2, 2, Color.BLACK.getRGB()); standardPicture.setRGB(4, 2, Color.BLACK.getRGB()); standardPicture.setRGB(7, 2, Color.WHITE.getRGB()); standardPicture.setRGB(0, 3, Color.BLACK.getRGB()); standardPicture.setRGB(4, 3, Color.WHITE.getRGB()); standardPicture.setRGB(0, 4, Color.BLACK.getRGB()); standardPicture.setRGB(6, 4, Color.BLACK.getRGB()); standardPicture.setRGB(0, 5, Color.WHITE.getRGB()); standardPicture.setRGB(6, 5, Color.WHITE.getRGB()); standardPicture.setRGB(3, 6, Color.BLACK.getRGB()); standardPicture.setRGB(3, 7, Color.BLACK.getRGB()); standardPicture.setRGB(4, 7, Color.BLACK.getRGB()); standardPicture.setRGB(6, 10, Color.WHITE.getRGB()); standardPicture.setRGB(6, 11, Color.WHITE.getRGB()); // for (int x = 0; x < width; ++x) { // for (int y = 0; y < height; ++y) { // // standardPicture.setRGB(x, y, Color.WHITE.getRGB()); // } // } ImageIO.write(standardPicture, "gif", new File("d:\\image\\VerificationCode\\standard\\8.gif"));// 将BufferedImage变量写入文件中。 } break; case 9: { standardPicture = ImageIO.read(new File("d:\\image\\VerificationCode\\2017年6月27日17时20分第3张验证码分割17.gif")); File sf = new File("d:\\image\\VerificationCode\\standard\\"); if (!sf.exists()) { sf.mkdirs(); } standardPicture.setRGB(6, 1, Color.WHITE.getRGB()); standardPicture.setRGB(7, 1, Color.WHITE.getRGB()); standardPicture.setRGB(7, 2, Color.WHITE.getRGB()); standardPicture.setRGB(7, 7, Color.WHITE.getRGB()); standardPicture.setRGB(8, 7, Color.WHITE.getRGB()); standardPicture.setRGB(0, 10, Color.WHITE.getRGB()); // for (int x = 0; x < width; ++x) { // for (int y = 0; y < height; ++y) { // // standardPicture.setRGB(x, y, Color.WHITE.getRGB()); // } // } ImageIO.write(standardPicture, "gif", new File("d:\\image\\VerificationCode\\standard\\9.gif"));// 将BufferedImage变量写入文件中。 } break; default: break; } } /** * 图片与图片之间的黑色像素比较 */ public static int imgToImgCompare(BufferedImage bufImg, BufferedImage standardImg) { int width = bufImg.getWidth(); // 读取识别图片的高度与宽度 int height = bufImg.getHeight(); int count = 0; for (int x = 0; x < width; ++x) { // 循环每一个像素 for (int y = 0; y < height; ++y) { if (bufImg.getRGB(x, y) == standardImg.getRGB(x, y) && bufImg.getRGB(x, y) == Color.BLACK.getRGB()) {// 相等就加一 count++; } } } return count; } /** * 确认被分割的小图片的数字 */ public static int decideImgNumber(BufferedImage bufImg) throws Exception { // try { // 自己输入的绝对路径 // 读取标准图片 BufferedImage standardImg0 = ImageIO.read(new File("D:\\image\\VerificationCode\\temp\\0.gif")); BufferedImage standardImg1 = ImageIO.read(new File("D:\\image\\VerificationCode\\temp\\1.gif")); BufferedImage standardImg2 = ImageIO.read(new File("D:\\image\\VerificationCode\\temp\\2.gif")); BufferedImage standardImg3 = ImageIO.read(new File("D:\\image\\VerificationCode\\temp\\3.gif")); BufferedImage standardImg4 = ImageIO.read(new File("D:\\image\\VerificationCode\\temp\\4.gif")); BufferedImage standardImg5 = ImageIO.read(new File("D:\\image\\VerificationCode\\temp\\5.gif")); BufferedImage standardImg6 = ImageIO.read(new File("D:\\image\\VerificationCode\\temp\\6.gif")); BufferedImage standardImg7 = ImageIO.read(new File("D:\\image\\VerificationCode\\temp\\7.gif")); BufferedImage standardImg8 = ImageIO.read(new File("D:\\image\\VerificationCode\\temp\\8.gif")); BufferedImage standardImg9 = ImageIO.read(new File("D:\\image\\VerificationCode\\temp\\9.gif")); int result[] = new int[10]; // 存储与每一个标准图片比较的结果 // 下面为取出比较结果的最大值 int max = 0; // 保存最大值 int site = 0; // 保存识别的数字 for (int i = 0; i < 10; i++) { // 一一识别 switch (i) { case 0: { result[i] = imgToImgCompare(bufImg, standardImg0); } break; case 1: { result[i] = imgToImgCompare(bufImg, standardImg1); } break; case 2: { result[i] = imgToImgCompare(bufImg, standardImg2); } break; case 3: { result[i] = imgToImgCompare(bufImg, standardImg3); } break; case 4: { result[i] = imgToImgCompare(bufImg, standardImg4); } break; case 5: { result[i] = imgToImgCompare(bufImg, standardImg5); } break; case 6: { result[i] = imgToImgCompare(bufImg, standardImg6); } break; case 7: { result[i] = imgToImgCompare(bufImg, standardImg7); } break; case 8: { result[i] = imgToImgCompare(bufImg, standardImg8); } break; case 9: { result[i] = imgToImgCompare(bufImg, standardImg9); } break; default: break; } } for (int i = 0; i < 10; i++) { // 比较大小 if (result[i] > max) { max = result[i]; site = i; } } return site; // 返回识别的数字 // } catch (Exception e) { // // TODO: handle exception // System.out.println(e); // } // return 0; // } }}
源代码打包地址:链接:http://pan.baidu.com/s/1sl8sEqL 密码:b03n
阅读全文
0 0
- Java简单验证码识别(附源码)
- [验证码识别] C#识别验证码图片通用类(附源码下载)
- 简单验证码识别程序(源码)
- C#识别验证码图片通用类(附源码下载)
- 简单Java验证码识别算法
- 简单验证码识别
- 简单验证码识别
- 简单验证码识别
- 简单验证码识别
- 简单验证码识别
- 简单验证码识别
- 12306 验证码识别源码
- java验证码识别带源码以及讲解视频
- java识别验证码
- java验证码识别
- java验证码识别
- java识别验证码
- java验证码识别
- 常见字符串函数的实现过程
- 从零开始构建支持TLS1.2的Web服务器Linux版(三)创建安装免费的HTTPS证书
- LeetCode151 Reverse Words in a String
- 计算机字符编码详解与汇总
- 字符串模拟实现
- Java简单验证码识别(附源码)
- Android-使用Theme来解决启动app是出现的空白屏
- java 动态代理
- Windows下使用命令安装Python的scipy库出错的解决
- Flask的路由和视图函数
- 八大排序算法之直接插入排序和希尔排序
- 一个关于Booth算法的文章
- Win10下Free Pascal IDE的BUG
- Platform机制