1, 生成图片请参照
http://tristan-s.iteye.com/admin/blogs/1026307
2, 目前只能解析没有干扰素的数字图片。 例如:
OK卡网站的验证码
去除干扰素,可以用以下算法
a> 线条的: 检查该线条是否是贯通的直线条,如是则去掉
b> 点: 检查该点是否是孤立的,如是则去掉
3, 需要将图片中的数字用0,1的形式来表达。解析每个数字,见附件
4, 代码
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class ImageDemo {
public static String parse(BufferedImage img){
int width = img.getWidth();
int height = img.getHeight();
StringBuilder sb = new StringBuilder();
for (int j = 0; j < height; j++) {
for (int i = 0; i < width; i++) {
int RGB = img.getRGB(i, j);
int red = (RGB >> 16) & 0xff;
if (red < 100) {
sb.append("1");
} else {
sb.append("0");
}
}
}
String s = sb.toString();
String s2 = s;
// System.out.println("图片的String码: " + s);
// System.out.println("--------------");
// for (int i = 0; i < height; i++) {
// System.out.println(s2.substring(0, width));
// s2 = s2.substring(width);
// }
return s;
}
public static void calResult(String s){
if(s.indexOf(n0)>=0){
System.out.print(" 0");
}else if(s.indexOf(n1)>=0){
System.out.print(" 1");
}else if(s.indexOf(n2)>=0){
System.out.print(" 2");
}else if(s.indexOf(n3)>=0){
System.out.print(" 3");
}else if(s.indexOf(n4)>=0){
System.out.print(" 4");
}else if(s.indexOf(n5)>=0){
System.out.print(" 5");
}else if(s.indexOf(n6)>=0){
System.out.print(" 6");
}else if(s.indexOf(n7)>=0){
System.out.print(" 7");
}else if(s.indexOf(n8)>=0){
System.out.print(" 8");
}else if(s.indexOf(n9)>=0){
System.out.print(" 9");
}
}
public static void main(String[] args) throws Exception {
//File file = new File("c:/image/num/nn" + n + ".jpg");
File file = new File("c:/image/image1.jpg");
BufferedImage imgOrg = ImageIO.read(file);
BufferedImage img = imgOrg.getSubimage(8, 0, 10, 20);
BufferedImage img2 = imgOrg.getSubimage(20, 0, 10, 20);
BufferedImage img3 = imgOrg.getSubimage(35, 0, 10, 20);
BufferedImage img4 = imgOrg.getSubimage(45, 0, 10, 20);
System.out.println("图片解析结果:");
String s = parse(img);
calResult(s);
String s2 = parse(img2);
calResult(s2);
String s3 = parse(img3);
calResult(s3);
String s4 = parse(img4);
calResult(s4);
}
private static String n0 = "000000000000011110000011111100011100111001100001100110000110011000011001100001100110000110011000011001100001100111001110001111110000011110000000000000";
private static String n1 = "000000000000000110000000111000000111100000110110000010011000000001100000000110000000011000000001100000000110000000011000000001100000000110000000000000";
private static String n2 = "000000000000011110000011111100011100111001100001100000000110000000011000000011000000011000000011000000011000000011000000011111111001111111100000000000";
private static String n3 = "000000000000011100000011111000011000110000000011000000001100000011100000001111000000000110000000011001100001100110000110001111110000011110000000000000";
private static String n4 = "000000000000000110000000111000000011100000011110000011011000001101100001100110001100011000111111111011111111100000011000000001100000000110000000000000";
private static String n5 = "000000000000111111000011111100001100000001100000000110111000011111110001100001100000000110000000011001100001100110000110001111110000011110000000000000";
private static String n6 = "000000000000011110000011111100001100011001100000000110000000011011100001111111000111000110011000011001100001100011000110001111110000011110000000000000";
private static String n7 = "000000000001111111100111111110000000010000000011000000011000000001100000001100000000110000000011000000001100000001100000000110000000011000000000000000";
private static String n8 = "000000000000011110000011111100011000011001100001100110000110001111110000111111000110000110011000011001100001100110000110001111110000011110000000000000";
private static String n9 = "000000000000011110000011111100011000011001100001100110000110011000111000111111100001110110000000011000000001100110001100001111110000011110000000000000";
private static String n = "9";
}

- 大小: 1.3 KB

- 大小: 1.2 KB
分享到:
相关推荐
java解析图片验证码
而当涉及到需要登录或者交互过程中有图片验证码的场景时,JMeter默认是无法直接处理的。本压缩包“jmeter识别图片验证码的包”提供了一种解决方案,即利用OCR(Optical Character Recognition,光学字符识别)技术来...
图片验证码识别 UUID唯一ID动态生成样本 动态生成全国的身份证号样本 动态生成手机号样本 token使用MD5加密生成样本 跨越线程组参数化样例 数据库动态参数化 数据库物理清理测试数据 等等
"命令行图片验证码识别工具"就是这样一个解决方案,它允许用户通过命令行界面来识别和解析图片验证码。 这个工具基于Node.js开发,Node.js是一种流行的JavaScript运行环境,允许开发者在服务器端执行JavaScript代码...
包含5个识别图片验证码的类,分别对应不同5种不同的验证码 其中用了两种不同的实现方式(截取采样像素比对+Tesseract-OCR识别) 附带一个图像指纹类(判定图片相似度)和一个寻找联通线的类(八皇后算法实现)
图片验证码通常包含扭曲的字母或数字,设计目的是让人类容易识别但机器难以解析。这些图片的特征可能包括随机的背景噪声、扭曲的文字形状、不同的字体、颜色变化以及透视效果。因此,机器学习模型需要学习识别这些...
jmeter使用ocrserver工具自动识别验证码配置
在这个项目中,开发者使用Delphi的图形处理能力来处理和解析图片验证码。图片识别是验证码识别的关键步骤,它通常涉及到图像预处理、特征提取和模式识别。 1. 图像预处理:在识别前,图片通常需要经过一系列处理,...
《通用图片验证码识别技术解析与应用》 验证码(CAPTCHA)是一种网络安全机制,用于防止自动化的机器人程序进行恶意操作,如垃圾邮件发送、账号注册等。随着技术的发展,验证码的形式日益多样化,其中以图片验证码...
图片验证码是一种广泛应用于网络安全验证的技术,其主要目的是防止自动化程序(如机器人)对网站进行恶意操作,例如批量注册、刷票等。通过让用户识别并输入图片中显示的一组随机字符,图片验证码确保了只有具备人类...
Java作为一门广泛使用的服务器端编程语言,提供了丰富的功能来生成图片验证码。本篇将深入讲解如何使用Java Servlet来实现这一过程。 首先,我们来看标题"java生成图片验证码"。这个标题暗示我们将探讨的是在Java...
图像识别则是通过算法解析图片内容,识别其中的文字、形状或物体。 验证码识别通常分为以下几个步骤: 1. 图像预处理:首先,我们需要对验证码图片进行预处理,包括灰度化、二值化、噪声消除等,目的是将复杂的...
"vc++ 根据文字生成图片 文字图片验证码.zip"是一个关于如何使用Visual C++(简称VC++)编程语言来创建文字图片验证码的项目。这个压缩包可能包含必要的源代码、文档和其他资源,帮助开发者了解和实现验证码生成的...
在网站的安全性方面,图片验证码(CAPTCHA)是防止自动机器人或恶意爬虫进行非法操作的重要工具。本文将深入探讨如何使用PHP创建一个实用的图片验证码,包括其功能、实现原理以及解决可能出现的问题。 首先,我们要...
图片验证码通常包含一组随机生成的字符,这些字符扭曲、倾斜或者加上噪点,使得人眼能识别但机器难以自动解析。实现这一功能的关键步骤包括: 1. **随机字符生成**:验证码通常由4到6个随机字母或数字组成,这需要...
图片验证码通常由一串随机字符或数字组成,这些字符经过扭曲、旋转、加噪等处理,使得人类可以轻易识别,而机器难以解析。这种设计旨在增加自动化程序识别的难度,从而保护网站的安全。 图片验证码识别组件的核心...
本文将深入探讨基于C# MVC框架实现的点选图片验证码的源码知识。 首先,让我们理解验证码的基本概念。验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”的缩写...
根据给定的文件信息,我们可以总结出以下关于“C#利用随机数图片写的验证码程序”的详细知识点: ### C# 随机数生成验证码 在C#编程中,验证码(CAPTCHA)是一种常用的安全措施,用于区分真实用户与自动化的机器人...