数字图像识别JAVA代码
java数字图像处理基础使用imageio写图像文件示例

java数字图像处理基础使⽤imageio写图像⽂件⽰例⼀个BufferedImage的像素数据储存在Raster中,ColorModel⾥⾯储存颜⾊空间,类型等信息,当前Java只⽀持⼀下三种图像格式- JPG,PNG,GIF,如何向让Java⽀持其它格式,⾸先要完成Java中的图像读写接⼝,然后打成jar,加上启动参数-Xbootclasspath/pnewimageformatIO.jar即可。
Java中如何读写⼀个图像⽂件,使⽤ImageIO对象即可。
读图像⽂件的代码如下:复制代码代码如下:File file = new File("D:\\test\\blue_flower.jpg");BufferedImage image = ImageIO.read(file);写图像⽂件的代码如下:复制代码代码如下:File outputfile = new File("saved.png");ImageIO.write(bufferedImage, "png",outputfile);从BufferedImage对象中读取像素数据的代码如下:复制代码代码如下:int type= image.getType();if ( type ==BufferedImage.TYPE_INT_ARGB || type == BufferedImage.TYPE_INT_RGB )return (int [])image.getRaster().getDataElements(x, y, width, height, pixels );elsereturn image.getRGB( x, y, width, height, pixels, 0, width );⾸先获取图像类型,如果不是32位的INT型数据,直接读写RGB值即可,否则需要从Raster对象中读取。
编写一个简单的图像识别程序

编写一个简单的图像识别程序图像识别是一种人工智能技术,它借助计算机视觉技术,对所处理的图像进行分析和解释。
图像识别已经广泛应用于许多领域,如医学影像分析、安防监控、交通检测等,并取得了很好的效果。
图像识别的基本流程如下:1.数据收集和准备:首先,需要收集能够代表要识别的对象或场景的图像数据。
这些数据应尽可能地多样化,以便模型能够适应不同的情境。
然后,需要对数据进行预处理,如图像去噪、尺度归一化等,以提高识别的准确性。
2.特征提取:特征提取是图像识别中非常重要的步骤。
它将图像中的关键信息提取出来,并转换为计算机能够理解的形式。
常用的特征提取方法包括卷积神经网络(CNN)、局部二值模式(LBP)等。
这些方法能够根据图像的空间和频域特征,提取图像中的纹理、边缘、形状等信息。
3.模型训练:在完成特征提取后,需要使用机器学习算法来训练模型。
将提取的特征与相应的标签进行匹配,通过监督学习的方法来训练模型。
常用的机器学习算法包括支持向量机(SVM)、随机森林(Random Forest)等。
训练模型的目标是使模型能够准确地判断输入图像的类别。
4.模型评估和优化:训练完成后,需要对模型进行评估和优化。
评估模型的性能,通过计算准确率、召回率等指标,判断模型的精度和泛化能力。
如果模型表现不佳,可以通过调整参数、增加数据量、改变算法等方式来优化模型。
5.图像识别应用:在完成模型的训练和优化后,就可以应用图像识别技术来实际识别图像。
将待识别的图像输入到模型中,模型将对图像进行分析,并给出判断结果。
根据判断结果,可以进行相应的后续处理,如物体跟踪、异常检测等。
随着深度学习技术的发展,基于神经网络的图像识别方法已经取得了很大的突破。
深度学习算法能够自动学习图像中的特征,并通过多层次的处理,提高模型的准确性。
其中,卷积神经网络(CNN)是深度学习方法中最常用的图像识别算法之一。
CNN是一种由多个卷积层和池化层构成的神经网络结构。
java 识别图片相似度及图片是否相同

1.比较MD5值判断图片是否相同package com.zerdoor.util;import java.io.File;import java.io.FileInputStream;import java.math.BigInteger;import java.security.MessageDigest;import java.util.HashMap;import java.util.Map;public class FileDigest {/*** 获取单个文件的MD5值!* @param file* @return*/public static String getFileMD5(File file) {if (!file.isFile()){return null;}MessageDigest digest = null;FileInputStream in=null;byte buffer[] = new byte[1024];int len;try {digest = MessageDigest.getInstance("MD5");in = new FileInputStream(file);while ((len = in.read(buffer, 0, 1024)) != -1) { digest.update(buffer, 0, len);}in.close();} catch (Exception e) {e.printStackTrace();return null;}BigInteger bigInt = new BigInteger(1, digest.digest()); return bigInt.toString(16);}/*** 获取文件夹中文件的MD5值* @param file* @param listChild ;true递归子目录中的文件* @return*/public static Map<String, String> getDirMD5(File file,boolean listChild) {if(!file.isDirectory()){return null;}//<filepath,md5>Map<String, String> map=new HashMap<String, String>();String md5;File files[]=file.listFiles();for(int i=0;i<files.length;i++){File f=files[i];if(f.isDirectory()&&listChild){map.putAll(getDirMD5(f, listChild));} else {md5=getFileMD5(f);if(md5!=null){map.put(f.getPath(), md5);}}}return map;}public static void main(String[] args) {File file1 = newFile("F:\\workspace_acg\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0 \\wtpwebapps\\acgweb\\uploads\\task\\1495872495006.jpg");String s = file1.getPath();File file2 = newFile("F:\\workspace_acg\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0 \\wtpwebapps\\acgweb\\uploads\\task\\1\\20170527\\1495872475363.jpg"); System.out.println(getFileMD5(file1).equals(getFileMD5(file2)));System.out.println(s);}}2.比较每一个的图片的像素相似度(效率较低)package com.zerdoor.util;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;public class CompareImg {// 改变成二进制码public static String[][] getPX(String args) {int[] rgb = new int[3];File file = new File(args);BufferedImage bi = null;try {bi = ImageIO.read(file);} catch (Exception e) {e.printStackTrace();}int width = bi.getWidth();int height = bi.getHeight();int minx = bi.getMinX();int miny = bi.getMinY();String[][] list = new String[width][height];for (int i = minx; i < width; i++) {for (int j = miny; j < height; j++) {int pixel = bi.getRGB(i, j);rgb[0] = (pixel & 0xff0000) >> 16;rgb[1] = (pixel & 0xff00) >> 8;rgb[2] = (pixel & 0xff);list[i][j] = rgb[0] + "," + rgb[1] + "," + rgb[2];}}return list;}public static int compareImage(String imgPath1, String imgPath2) { String[] images = { imgPath1, imgPath2 };if (images.length == 0) {System.out.println("Usage >java BMPLoader ImageFile.bmp"); System.exit(0);}// 分析图片相似度 beginString[][] list1 = getPX(images[0]);String[][] list2 = getPX(images[1]);int xiangsi = 0;int busi = 0;int i = 0, j = 0;for (String[] strings : list1) {if ((i + 1) == list1.length) {continue;}for (int m = 0; m < strings.length; m++) {try {String[] value1 = list1[i][j].toString().split(",");String[] value2 = list2[i][j].toString().split(",");int k = 0;for (int n = 0; n < value2.length; n++) {if (Math.abs(Integer.parseInt(value1[k]) - Integer.parseInt(value2[k])) < 5) { xiangsi++;} else {busi++;}}} catch (RuntimeException e) {continue;}j++;}i++;}list1 = getPX(images[1]);list2 = getPX(images[0]);i = 0;j = 0;for (String[] strings : list1) {if ((i + 1) == list1.length) {continue;}for (int m = 0; m < strings.length; m++) {try {String[] value1 = list1[i][j].toString().split(",");String[] value2 = list2[i][j].toString().split(",");int k = 0;for (int n = 0; n < value2.length; n++) {if (Math.abs(Integer.parseInt(value1[k]) - Integer.parseInt(value2[k])) < 5) { xiangsi++;} else {busi++;}}} catch (RuntimeException e) {continue;}j++;}i++;}String baifen = "";try {baifen = ((Double.parseDouble(xiangsi + "") / Double.parseDouble((busi + xiangsi) + "")) + "");baifen = baifen.substring(baifen.indexOf(".") + 1, baifen.indexOf(".") + 3);} catch (Exception e) {baifen = "0";}if (baifen.length() <= 0) {baifen = "0";}if (busi == 0) {baifen = "100";}System.out.println("相似像素数量:" + xiangsi + " 不相似像素数量:" + busi + " 相似率:" + Integer.parseInt(baifen) + "%");return Integer.parseInt(baifen);}public static void main(String[] args) {String file1 ="F:\\workspace_acg\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtp webapps\\acgweb\\uploads\\task\\1\\20170526\\1495780364826.png";String file2 ="F:\\workspace_acg\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtp webapps\\acgweb\\uploads\\task\\1495610591334.png";int compareImage = pareImage(file1, file2);System.out.println(compareImage);}}3.通过汉明距离计算相似度,取值范围 [0.0, 1.0]package com.zerdoor.util;import java.awt.Color;import java.awt.Graphics2D;import java.awt.Image;import java.awt.color.ColorSpace;import java.awt.image.BufferedImage;import java.awt.image.ColorConvertOp;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;public class ImgSimilarity{// 全流程public static void main(String[] args) throws IOException {// 获取图像File imageFile1 = newFile("F:\\workspace_acg\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0 \\wtpwebapps\\acgweb\\uploads\\task\\1496212755337.jpg");File file2 = newFile("F:\\workspace_acg\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0 \\wtpwebapps\\acgweb\\uploads\\task\\1496212755337.jpg");getSimilarity(imageFile1, file2);}public static double getSimilarity(File imageFile1, File file2) throws IOException {int[] pixels1 = getImgFinger(imageFile1);int[] pixels2 = getImgFinger(file2);// 获取两个图的汉明距离(假设另一个图也已经按上面步骤得到灰度比较数组)int hammingDistance = getHammingDistance(pixels1, pixels2);// 通过汉明距离计算相似度,取值范围 [0.0, 1.0]double similarity = calSimilarity(hammingDistance)*100;System.out.println("相似度:"+similarity+"%");return similarity;}private static int[] getImgFinger(File imageFile) throws IOException {Image image = ImageIO.read(imageFile);// 转换至灰度image = toGrayscale(image);// 缩小成32x32的缩略图image = scale(image);// 获取灰度像素数组int[] pixels1 = getPixels(image);// 获取平均灰度颜色int averageColor = getAverageOfPixelArray(pixels1);// 获取灰度像素的比较数组(即图像指纹序列)pixels1 = getPixelDeviateWeightsArray(pixels1, averageColor);return pixels1;}// 将任意Image类型图像转换为BufferedImage类型,方便后续操作public static BufferedImage convertToBufferedFrom(Image srcImage) {BufferedImage bufferedImage = new BufferedImage(srcImage.getWidth(null), srcImage.getHeight(null), BufferedImage.TYPE_INT_ARGB);Graphics2D g = bufferedImage.createGraphics();g.drawImage(srcImage, null, null);g.dispose();return bufferedImage;}// 转换至灰度图public static BufferedImage toGrayscale(Image image) {BufferedImage sourceBuffered = convertToBufferedFrom(image);ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY); ColorConvertOp op = new ColorConvertOp(cs, null);BufferedImage grayBuffered = op.filter(sourceBuffered, null);return grayBuffered;}// 缩放至32x32像素缩略图public static Image scale(Image image) {image = image.getScaledInstance(32, 32, Image.SCALE_SMOOTH);return image;}// 获取像素数组public static int[] getPixels(Image image) {int width = image.getWidth(null);int height = image.getHeight(null);int[] pixels = convertToBufferedFrom(image).getRGB(0, 0, width, height, null, 0, width);return pixels;}// 获取灰度图的平均像素颜色值public static int getAverageOfPixelArray(int[] pixels) {Color color;long sumRed = 0;for (int i = 0; i < pixels.length; i++) {color = new Color(pixels[i], true);sumRed += color.getRed();}int averageRed = (int) (sumRed / pixels.length);return averageRed;}// 获取灰度图的像素比较数组(平均值的离差)public static int[] getPixelDeviateWeightsArray(int[] pixels,final int averageColor) {Color color;int[] dest = new int[pixels.length];for (int i = 0; i < pixels.length; i++) {color = new Color(pixels[i], true);dest[i] = color.getRed() - averageColor > 0 ? 1 : 0;}return dest;}// 获取两个缩略图的平均像素比较数组的汉明距离(距离越大差异越大)public static int getHammingDistance(int[] a, int[] b) {int sum = 0;for (int i = 0; i < a.length; i++) {sum += a[i] == b[i] ? 0 : 1;}return sum;}// 通过汉明距离计算相似度public static double calSimilarity(int hammingDistance){int length = 32*32;double similarity = (length - hammingDistance) / (double) length;// 使用指数曲线调整相似度结果similarity = ng.Math.pow(similarity, 2);return similarity;}}。
Java图像处理:使用Java 2D API实现图片处理

Java图像处理:使用Java 2D API实现图片处理引言:随着数字摄影技术的发展,我们每天都会拍摄大量的照片。
然而,有时候我们可能需要对这些照片进行一些处理,以使它们更加美观或符合特定的需求。
在本文中,我们将介绍如何使用Java 2D API来实现图片处理,帮助您更好地处理和优化您的图片。
第一部分:Java 2D API简介Java 2D API是Java平台中用于处理图形和图像的强大工具。
它提供了一组丰富的类和方法,使我们能够创建和操作各种图形对象,如线条、矩形、多边形和图像。
Java 2D API还支持图形渲染、颜色管理和图像转换等高级功能。
第二部分:加载和显示图片在开始处理图片之前,我们首先需要加载和显示图片。
Java 2D API提供了Image类来处理图像。
我们可以使用ImageIO类的静态方法read()来从文件中读取图像,并将其保存在一个Image对象中。
然后,我们可以使用Graphics类的drawImage()方法将图像绘制到指定的位置上。
第三部分:图片缩放有时候,我们可能需要调整图片的大小,使其适应特定的显示区域或满足特定的要求。
Java 2D API提供了AffineTransform类来处理图像的变换操作。
我们可以使用AffineTransform类的scale()方法来缩放图像。
通过指定缩放因子,我们可以按比例增加或减小图像的大小。
第四部分:图片旋转除了缩放,有时候我们还需要将图片旋转一定角度。
Java 2D API同样提供了AffineTransform类来实现图像的旋转操作。
我们可以使用AffineTransform类的rotate()方法来指定旋转的角度,并将其应用于图像。
第五部分:图片滤镜效果为了给图片增加一些特殊的效果,Java 2D API提供了一些内置的滤镜类。
我们可以使用这些滤镜类来对图像进行模糊、锐化、亮度调整等操作。
通过创建一个Filter对象,并将其应用于图像,我们可以很容易地实现这些效果。
利用Java在macOS电脑上实现OCR图像识别

利用Java在macOS电脑上实现OCR图像识别在当今数字化时代,光学字符识别(OCR)技术的应用越来越广泛,它可以将图片中的文字信息转换为可编辑的文本数据,为用户提供了极大的便利。
而在macOS电脑上,通过Java编程语言实现OCR图像识别是一种常见且高效的方式。
本文将介绍如何利用Java在macOS电脑上实现OCR图像识别的方法和步骤。
1. 准备工作在开始实现OCR图像识别之前,我们需要进行一些准备工作。
首先,确保你的macOS电脑已经安装了Java开发环境(JDK),如果没有安装,可以前往Oracle官网下载并安装最新版本的JDK。
其次,我们需要选择一个OCR库来帮助我们实现图像识别功能。
在Java领域,Tesseract-OCR是一个常用且强大的OCR库,它支持多种语言,并且在macOS系统上表现优秀。
2. 集成Tesseract-OCR库首先,我们需要下载Tesseract-OCR库的安装包,并进行解压缩。
然后,在Java项目中引入Tesseract-OCR库的依赖,可以通过Maven或Gradle等构建工具来管理项目依赖。
接着,配置Tesseract-OCR库的路径,确保Java程序能够正确调用该库进行图像识别操作。
3. 编写Java程序接下来,我们开始编写Java程序来实现OCR图像识别功能。
首先,加载待识别的图片文件到内存中,并将其转换为Tesseract-OCR 库可识别的格式。
然后,调用Tesseract-OCR库提供的API接口,对图片中的文字进行识别并提取出文本信息。
最后,将识别结果输出到控制台或保存到文件中,以便后续处理和分析。
示例代码star:编程语言:javaimport net.sourceforge.tess4j.Tesseract;import net.sourceforge.tess4j.TesseractException;import java.io.File;public class OCRImageRecognition {public static void main(String[] args) {File imageFile = new File("image.jpg");Tesseract tesseract = new Tesseract();try {String result = tesseract.doOCR(imageFile);System.out.println("OCR Result: " + result);} catch (TesseractException e) {System.err.println(e.getMessage());}}}示例代码end以上是一个简单的Java程序示例,通过Tesseract-OCR库实现了对图片中文字的识别,并将识别结果输出到控制台。
使用JAVA进行图像识别与处理的工具及技术

使用JAVA进行图像识别与处理的工具及技术引言:随着科技的不断发展,图像识别与处理已经成为了计算机科学领域的热门研究方向。
而JAVA作为一种广泛应用于软件开发的编程语言,也提供了丰富的工具和技术来支持图像识别与处理。
本文将介绍一些常用的JAVA图像处理工具和技术,并探讨其在实际应用中的优势和挑战。
一、图像处理工具1. OpenCVOpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。
它支持多种编程语言,包括JAVA。
通过使用OpenCV,开发人员可以轻松实现图像的读取、显示、滤波、边缘检测等常见操作。
同时,OpenCV还提供了一些高级功能,如人脸检测、目标跟踪等,使得图像处理更加便捷和高效。
2. Java Advanced Imaging (JAI)JAI是JAVA平台上的一组图像处理API,提供了丰富的图像处理功能。
它支持图像的读取、写入、缩放、旋转、滤波等操作,并且可以处理多种图像格式。
JAI还提供了一些高级功能,如图像合成、图像分析等,使得开发人员能够更加灵活地进行图像处理。
3. ImageJImageJ是一款基于JAVA的开源图像处理软件,提供了丰富的图像处理和分析功能。
它支持图像的读取、显示、滤波、分割等操作,并且提供了一些常用的图像分析算法,如形态学操作、图像测量等。
ImageJ还支持插件扩展,使得开发人员可以根据需求添加自定义的图像处理功能。
二、图像识别技术1. 机器学习机器学习是一种广泛应用于图像识别的技术。
通过训练模型,机器可以从大量的图像数据中学习特征,并对新的图像进行分类和识别。
JAVA提供了一些机器学习库,如Weka和DL4J,可以帮助开发人员实现图像分类、目标检测等任务。
2. 深度学习深度学习是一种基于神经网络的图像识别技术。
它通过多层次的神经网络模型,可以学习到更加复杂的图像特征,并实现更高精度的图像识别。
JAVA提供了一些深度学习库,如Deeplearning4j和DL4J,可以帮助开发人员构建和训练深度学习模型。
一步步实现滑动验证码(拼图验证码),Java图片处理关键代码

⼀步步实现滑动验证码(拼图验证码),Java图⽚处理关键代码 最近滑动验证码在很多⽹站逐步流⾏起来,⼀⽅⾯对⽤户体验来说,⽐较新颖,操作简单,另⼀⽅⾯相对图形验证码来说,安全性并没有很⼤的降低。
当然到⽬前为⽌,没有绝对的安全验证,只是不断增加攻击者的绕过成本。
接下来分析下滑动验证码的核⼼流程:1. 后端随机⽣成抠图和带有抠图阴影的背景图⽚,后台保存随机抠图位置坐标2. 前端实现滑动交互,将抠图拼在抠图阴影之上,获取到⽤户滑动距离值,⽐如以下⽰例3. 前端将⽤户滑动距离值传⼊后端,后端校验误差是否在容许范围内。
这⾥单纯校验⽤户滑动距离是最基本的校验,出于更⾼的安全考虑,可能还会考虑⽤户滑动的整个轨迹,⽤户在当前页⾯的访问⾏为等。
这些可以很复杂,甚⾄借助到⽤户⾏为数据分析模型,最终的⽬标都是增加⾮法的模拟和绕过的难度。
这些有机会可以再归纳总结常⽤到的⽅法,本⽂重点集中在如何基于Java来⼀步步实现滑动验证码的⽣成。
可以看到,滑动图形验证码,重要有两个图⽚组成,抠块和带有抠块阴影的原图,这⾥⾯有两个重要特性保证被暴⼒破解的难度:抠块的形状随机和抠块所在原图的位置随机。
这样就可以在有限的图集中制造出随机的、⽆规律可寻的抠图和原图的配对。
⽤代码如何从⼀张⼤图中抠出⼀个有特定随机形状的⼩图呢?第⼀步,先确定⼀个抠出图的轮廓,⽅便后续真正开始执⾏图⽚处理操作图⽚是有像素组成,每个像素点对应⼀种颜⾊,颜⾊可以⽤RGB形式表⽰,外加⼀个透明度,把⼀张图理解成⼀个平⾯图形,左上⾓为原点,向右x轴,向下y轴,⼀个坐标值对应该位置像素点的颜⾊,这样就可以把⼀张图转换成⼀个⼆维数组。
基于这个考虑,轮廓也⽤⼆维数组来表⽰,轮廓内元素值为1,轮廓外元素值对应0。
这时候就要想这个轮廓形状怎么⽣成了。
有坐标系、有矩形、有圆形,没错,⽤到数学的图形函数。
典型⽤到⼀个圆的函数⽅程和矩形的边线的函数,类似:(x-a)²+(y-b)²=r²中,有三个参数a、b、r,即圆⼼坐标为(a,b),半径r。
Java的物体识别实现智能像处理与分析

Java的物体识别实现智能像处理与分析物体识别是人工智能领域的一个重要应用,它利用计算机视觉技术和机器学习算法来识别和分类图像或视频中的物体。
Java是一种流行的编程语言,具有广泛的应用领域。
本文将介绍Java在物体识别领域的应用,以及实现智能图像处理与分析的方法。
一、物体识别的概念和应用物体识别是指通过计算机视觉算法、模式识别等技术,对图像或视频中的物体进行检测、识别和分类的过程。
它在很多领域都有广泛的应用,如智能安防监控、自动驾驶、智能医疗等。
二、Java在物体识别中的应用Java作为一种跨平台的编程语言,具有良好的可移植性和易用性,已经在物体识别领域得到了广泛的应用。
下面将介绍Java在物体识别中的几种常用方法。
1. OpenCVOpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。
Java通过与OpenCV的绑定库进行结合,可以方便地使用OpenCV提供的各种物体识别算法。
例如,利用OpenCV提供的Haar级联分类器算法,可以实现人脸识别、车辆识别等功能。
2. 图像特征提取图像特征提取是物体识别的关键步骤之一,它通过提取图像的局部特征或全局特征来描述物体。
Java提供了许多图像处理库,可以方便地进行图像特征提取。
例如,利用JavaCV库可以提取SIFT、SURF等特征点,并进行匹配和分类。
3. 深度学习深度学习是近年来物体识别领域的一个重要突破,通过神经网络的多层模型,可以学习和提取图像中的高级特征。
Java提供了多个深度学习框架,如TensorFlow、DL4J等,可以方便地开发和训练深度学习模型。
三、智能图像处理与分析的实现智能图像处理与分析是物体识别的一个重要应用方向,它通过对图像进行分析和处理,实现对图像内容的理解和解释。
下面将介绍几种常见的智能图像处理与分析方法。
1. 图像分割图像分割是将图像分成若干个子区域的过程,可以通过颜色、纹理、形状等特征来实现分割。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
", JOptionPane.ERROR_MESSAGE);
} });
btFresh.addActionListener(new ActionListener() { // 刷新按钮监听 public void actionPerformed(ActionEvent e) { p2.removeAll(); // 先移除,否则出现重叠 p3.removeAll();
for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { if (pixels[i * width + j] == -1) { ret[j][i] = 0; } else { ret[j][i] = 1; } }
} return ret; }
new ImageRecognitor(i);
label2 = new JLabel(new ImageIcon("../img/00" + j + ".png"), SwingConstants.CENTER);
new ImageRecognitor(j);
label3 = new JLabel(new ImageIcon("../img/00" + k + ".png"), SwingConstants.CENTER);
btReco.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { write.setText(ImageRecognitor.numString); }
});
btCent.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println(write.getText()); System.out.println(ImageRecognitor.numString);
}
/** * 得到二值化矩阵 */
public static int[][] getSymbolMatrix(int[] pixels, int sparseFactor) { final int width = ImageModel.width; final int height = ImageModel.height; int[][] ret = new int[width][height];
public void init() { new ImageModel(); c = getContentPane(); p1 = new JPanel(new FlowLayout()); p2 = new JPanel(new FlowLayout(1, 0, 0)); p3 = new JPanel(new FlowLayout());
new ImageRecognitor(i);
label2 = new JLabel(new ImageIcon("../img/00" + j + ".png"), SwingConstants.CENTER);
new ImageRecognitor(j);
label3 = new JLabel(new ImageIcon("../img/00" + k + ".png"), SwingConstants.CENTER);
} }
package pkg;
/** * Created on 2014/4/25. */
import java.awt.Image; import java.awt.image.PixelGrabber; import java.util.logging.Level; import java.util.logging.Logger;
new ImageRecognitor(k);
label4 = new JLabel("验证码", new ImageIcon("../img/00" + r + ".png"), SwingConstants.CENTER);
new ImageRecognitor(r);
System.out.println(ImageRecognitor.numString); //输出识别出的数字串 write = new JTextField(8); write.setOpaque(false);
new ImageRecognitor(k);
label4 = new JLabel("验证码", new ImageIcon("../img/00" + r + ".png"), SwingConstants.CENTER);
new ImageRecognitor(r); write = new JTextField(8); write.setOpaque(false);
p1.add(btReco); p1.add(btCent); p2.add(label1); p2.add(label2); p2.add(label3); p2.add(label4); p3.add(write); p3.add(btFresh); c.add(p1, BorderLayout.SOUTH); c.add(p2, BorderLayout.CENTER); c.add(p3, BorderLayout.NORTH);
double v_t_l = 0; double v_t_r = 0; double v_c = 0; double v_b_l = 0; double v_b_r = 0;
for (int i = 0; i < matrix[0].length; i++) { for (int j = 0; j < matrix.length; j++) { if (matrix[j][i] != 0) { System.out.print("*"); } else { System.out.print(" "); }
package pkg;
import javax.swing.*;
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
/** * 图形化界面 */
public class ImageApp extends JApplet { private static final long serialVersionUID = 1L; static int i, j, k, r; Container c; JPanel p1, p2, p3; JButton btReco, btCent, btFresh; JLabel label1, label2, label3, label4; JTextField write;
/** * 输出字符矩阵 */
public static void displayMatrix(int[][] matrix) { System.out.println(" "); int top_l = 0; int top_r = 0; int cet = 0; int bot_l = 0; int bot_r = 0; int k = 0;
c.setBackground(new Color(204, 245, 255)); p2.setBackground(new Color(204, 245, 255));
/**
* 重绘面板 */ p2.add(label1); p2.add(label2); p2.add(label3); p2.add(label4); label1.updateUI(); label2.updateUI(); label3.updateUI(); label4.updateUI(); p2.updateUI();
btReco = new JButton("识别"); btCent = new JButton("确定"); btFresh = new JButton("刷新");
btReco.setContentAreaFilled(false); btCent.setContentAreaFilled(false); btFresh.setContentAreaFilled(false);
public class ImageMatrix { static int k = 0; static double[] total = new double[10]; static double totalPic;
public static int[] getPixels(Image image, int width, int height) { // 得到像素大小 int[] pixels = new int[width * height]; try { new PixelGrabber(image, 0, 0, width, height, pixels, 0, width) .grabPixels(); } catch (InterruptedException ex) { Logger.getLogger(ImageMatrix.class.getName()).log(Level.SEVERE, null, ex); } return pixels;