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对象中读取。
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中bufferedimage的用法
文章标题:深度解析Java中BufferedImage的用法与应用一、介绍在Java编程中,BufferedImage是一个常用的类,用于处理图像的像素数据。
它提供了丰富的方法和功能,可以用于图像的读取、处理和保存,同时也支持图像的格式转换和像素操作。
在本文中,我们将深度探讨BufferedImage的用法与应用,并介绍其在Java图像处理中的重要性。
二、BufferedImage的基本用法1. BufferedImage的创建在Java中,我们可以通过ImageIO类的read()方法来创建一个BufferedImage对象,例如:```BufferedImage image = ImageIO.read(new File("image.jpg")); ```2. BufferedImage的基本操作BufferedImage类提供了getRGB()和setRGB()方法来读取和修改像素值,同时也支持获取宽度、高度和颜色模型等属性。
三、BufferedImage的高级功能1. 图像格式转换BufferedImage可以方便地进行图像格式的转换,例如将JPEG格式的图像转换为PNG格式:```BufferedImage originalImage = ImageIO.read(newFile("image.jpg"));ImageIO.write(originalImage, "png", new File("image.png"));```2. 像素级操作BufferedImage支持对图像进行像素级操作,例如修改像素颜色、绘制图形和文字等。
四、BufferedImage的应用场景1. 图像处理在图像处理应用中,BufferedImage可以用于图像的读取、编辑和保存,同时也支持图像的缩放、裁剪和旋转等操作。
2. 视频处理在实时视频处理中,BufferedImage可以用于处理视频帧的像素数据,例如视频流的转换、滤镜效果的应用和视频数据的提取等。
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实现
图⽚模糊处理的Java实现 String str = "2.jpg";File f = new File(str);try {BufferedImage image2 = ImageIO.read(f);int w = image2.getWidth();int h = image2.getHeight();int[] arr = image2.getRGB(0, 0, w, h, null, 0, w);int[][] xy = new int[h][w];for(int i = 0;i<h;i++) {for(int k=0;k<w;k++) {xy[i][k] = arr[i*k+k];}}int th =0;int tw =0;for(int i = 0;i<h;i++) {for(int k=0;k<w;k++) {th =i+1;tw = k+1;if((th == h)) {th = h-1;}if((tw == w)) {tw = w-1;}int temp1 = xy[Math.abs(i-1)][k] -xy[i][k];int temp2 = xy[th][k] -xy[i][k];int temp3 = xy[i][Math.abs(k-1)] -xy[i][k];int temp4 = xy[i][tw] -xy[i][k];xy[i][k] =(int)(xy[i][k] + (temp1+temp2+temp3+temp4)/4);};}for(int i = 0;i<h;i++) {for(int k=0;k<w;k++) {arr[i*k+k]=xy[i][k] ;}}image2.setRGB(0, 0, w, h, arr, 0, w);ImageIO.write(image2, "jpg", new File("22.jpg")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 其原理就是获取图⽚的像素值,其表⽰就是int 类型的⼀维数组,对于图⽚来说有固定的height 和width ,因此我们将该数组转化为 int [height][width] 的⼆维数组,我们假设该⼆维数组表⽰图像上⾯的各点值,通过算法取出该点上下左右的数值,对其做数学上⾯的取平均值或者,使⽤⽅差等数学⽅法,我们即可得到新的⼆维数组,再将该⼆维数组转给我们的⼀维数组,并通过setRGB ⽅法将像素值覆写,得到图⽚。
基于Java的智能影像识别系统设计与优化
基于Java的智能影像识别系统设计与优化智能影像识别系统是一种利用计算机视觉技术对图像或视频进行分析和识别的系统。
随着人工智能和深度学习技术的不断发展,智能影像识别系统在各个领域得到了广泛的应用,如安防监控、医学影像分析、自动驾驶等。
本文将重点讨论基于Java语言的智能影像识别系统的设计与优化。
1. 智能影像识别系统概述智能影像识别系统是指利用计算机视觉技术对图像或视频进行分析和识别,从而实现自动化处理和智能决策的系统。
该系统通常包括图像采集、图像预处理、特征提取、特征匹配和分类识别等模块。
在基于Java语言的智能影像识别系统中,我们可以利用Java提供的丰富库函数和强大的生态系统来实现各种功能模块。
2. Java在智能影像识别中的优势Java作为一种跨平台的编程语言,具有良好的可移植性和跨平台性,适合用于开发各类应用程序,包括智能影像识别系统。
同时,Java拥有强大的面向对象编程特性和丰富的第三方库支持,可以帮助开发人员快速构建高效稳定的系统。
3. 智能影像识别系统设计3.1 图像采集与预处理在智能影像识别系统中,首先需要对图像进行采集和预处理。
Java提供了丰富的图像处理库,如Java Advanced Imaging (JAI) 和Java ImageIO等,可以帮助我们实现图像数据的读取、解码和预处理操作。
3.2 特征提取与特征匹配特征提取是智能影像识别系统中非常重要的一步,通过提取图像中的关键特征信息来描述图像内容。
常用的特征提取算法包括SIFT、SURF、HOG等。
在Java中,我们可以利用OpenCV等第三方库来实现这些算法,并进行特征匹配以实现目标检测和目标跟踪等功能。
3.3 分类识别与模型优化分类识别是智能影像识别系统中的核心任务,通过构建分类器模型对图像进行分类。
在Java中,我们可以使用深度学习框架如TensorFlow、Keras等来构建卷积神经网络(CNN)或循环神经网络(RNN)等模型,并通过大量数据集进行训练和优化,以提高系统的准确率和鲁棒性。
Java中的图像处理和特征提取
Java中的图像处理和特征提取图像处理是计算机视觉领域的重要分支之一,它涉及到对图像进行各种操作以便更好地理解和利用图像信息。
特征提取是图像处理的一个重要环节,它是指从图像中提取出具有一定特征的信息,比如边缘、颜色、纹理等,以便进行图像分类、检索、识别等应用。
本文将重点介绍Java中的图像处理和特征提取的相关知识和技术,包括图像处理的基本操作、常用的特征提取方法以及相关的Java库和工具。
文章将从以下几个方面展开讨论:一、图像处理的基本操作1.图像的表示与读取2.图像的基本操作3.图像的滤波处理4.图像的几何变换5.图像的分割与合并6.图像的压缩与解压缩二、特征提取的常用方法1.边缘检测2.颜色特征提取3.纹理特征提取4.形状特征提取5.光流特征提取6.视觉词袋(Bag of Visual Words)三、Java中的图像处理和特征提取库及工具1. Java图像处理库2. Java特征提取库3. Java图像处理与特征提取工具四、应用实例1.图像处理与特征提取在人脸识别中的应用2.图像处理与特征提取在物体识别中的应用3.图像处理与特征提取在医学影像分析中的应用4.图像处理与特征提取在图像检索中的应用五、总结与展望1.图像处理与特征提取的发展趋势2.图像处理与特征提取的研究方向3. Java在图像处理与特征提取领域的发展前景一、图像处理的基本操作1.图像的表示与读取在Java中,图像通常以像素点的形式表示,每个像素点包含了图像中的颜色信息。
Java提供了图像处理和图像读取的相关API,比较常用的有BufferedImage类、ImageIO类和Image类。
通过这些API,可以很方便地读取和显示图像。
2.图像的基本操作图像的基本操作包括图像的增强、灰度化、二值化、色彩平衡等。
在Java中,可以通过对图像的像素点进行逐点操作实现这些功能。
另外,还可以使用Java图形库提供的相关函数来实现图像的基本操作。
使用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使用imageio读写图像
Java 使用imageio 读写图像Java 中进行图像I/O (即读图片和写图片,不涉及到复杂图像处理)有三个方法:1. Java Image I/O API ,支持常见图片,从Java 2 version 1.4.0开始就内置了。
主页:2. JAI 中的 Image I/O Tools ,支持更多图片类型,例如JPEG-LS, JPEG2000, 和 TIFF 。
主页:。
JAI 是一个关于图像处理的框架,很庞大, 其中仅仅jai-imageio 是关于图像I/O 的,其他的可以不看。
3. JAI 的com.sun.media.jai.codec 也有一定的图像解码能力 当然,还有众多的java 开源工具包可以读写图像,例如JIMI, JMagic 等,但JDK 目前本身能 够读写图片,就用JDK 的,开发和部署方便,不需要额外下载jar 包。
由于JAI 是Java 新加入的,很多组件不是正式规范,JDK 不自带,因此开发和部署需要额外 安装,安装文件在官网下载得到。
如果你仅仅想读取常见格式的图片,不需要用JAI 这么高级这么庞大的东西, 用Java Image I/O API 即可。
下面重点介绍 Java Image I/O API 。
Java Image I/O API 主要在 javax.imageio 下面。
JDK 已经内置了常见图片格式的插件, 但它提供了插件体系结构,第三方也可以开发插件支持其他图片格式。
下面这段代码可以展示,JDK 内置支持的图片格式。
1 2 3 4 5 6 7 8 9 10 11 import javax.imageio.*;import java.util.Arrays;public class HelloWorld {public static void main(String args[]) {String readFormats[] = ImageIO.getReaderFormatNames();String writeFormats[] = ImageIO.getWriterFormatNames();System.out.println(“Readers: ” + Arrays.asList(readFormats )); System.out.println(“Writers: ” + Arrays.asList(writeFormats)); }}主页上有一个文档,Java Image I/O API Guide ,很通俗易懂,可以让你快速上手。
Java的物体识别实现智能像处理与分析
Java的物体识别实现智能像处理与分析物体识别是人工智能领域的一个重要应用,它利用计算机视觉技术和机器学习算法来识别和分类图像或视频中的物体。
Java是一种流行的编程语言,具有广泛的应用领域。
本文将介绍Java在物体识别领域的应用,以及实现智能图像处理与分析的方法。
一、物体识别的概念和应用物体识别是指通过计算机视觉算法、模式识别等技术,对图像或视频中的物体进行检测、识别和分类的过程。
它在很多领域都有广泛的应用,如智能安防监控、自动驾驶、智能医疗等。
二、Java在物体识别中的应用Java作为一种跨平台的编程语言,具有良好的可移植性和易用性,已经在物体识别领域得到了广泛的应用。
下面将介绍Java在物体识别中的几种常用方法。
1. OpenCVOpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。
Java通过与OpenCV的绑定库进行结合,可以方便地使用OpenCV提供的各种物体识别算法。
例如,利用OpenCV提供的Haar级联分类器算法,可以实现人脸识别、车辆识别等功能。
2. 图像特征提取图像特征提取是物体识别的关键步骤之一,它通过提取图像的局部特征或全局特征来描述物体。
Java提供了许多图像处理库,可以方便地进行图像特征提取。
例如,利用JavaCV库可以提取SIFT、SURF等特征点,并进行匹配和分类。
3. 深度学习深度学习是近年来物体识别领域的一个重要突破,通过神经网络的多层模型,可以学习和提取图像中的高级特征。
Java提供了多个深度学习框架,如TensorFlow、DL4J等,可以方便地开发和训练深度学习模型。
三、智能图像处理与分析的实现智能图像处理与分析是物体识别的一个重要应用方向,它通过对图像进行分析和处理,实现对图像内容的理解和解释。
下面将介绍几种常见的智能图像处理与分析方法。
1. 图像分割图像分割是将图像分成若干个子区域的过程,可以通过颜色、纹理、形状等特征来实现分割。
如何在Java中进行图像识别和人工智能模型的部署
如何在Java中进行图像识别和人工智能模型的部署在今天的数字化时代,图像识别和人工智能技术已经被广泛应用于各个领域,包括医疗、金融、工业等。
在这篇文章中,我们将重点介绍如何在Java中进行图像识别和人工智能模型的部署。
一、图像识别的基本原理图像识别是指通过计算机技术对图像进行处理和分析,从而实现对图像内容的识别和理解。
图像识别的基本原理包括图像获取、图像预处理、特征提取、模式匹配等步骤。
其中,特征提取是图像识别的核心步骤,它可以通过各种算法和技术来提取图像中的特征信息,比如边缘、纹理、颜色等。
二、Java图像识别的常用库和工具在Java中进行图像识别,常用的库和工具包括OpenCV、JavaCV、DeepLearning4j等。
这些库和工具提供了丰富的图像处理和机器学习功能,可以帮助开发人员快速构建图像识别模型。
1. OpenCVOpenCV是一个开源的计算机视觉库,它提供了丰富的图像处理和计算机视觉算法,包括图像获取、图像预处理、特征提取等功能。
通过OpenCV,开发人员可以快速构建图像识别应用。
2. JavaCVJavaCV是一个基于OpenCV的Java库,它提供了对OpenCV的Java绑定,可以方便地将OpenCV的功能集成到Java应用中。
3. DeepLearning4jDeepLearning4j是一个基于Java的深度学习库,它提供了丰富的深度学习算法,并支持在Java应用中进行模型的训练和部署。
三、人工智能模型的部署在图像识别中,人工智能模型的部署是至关重要的一步。
通常我们会使用深度学习模型来进行图像识别,比如卷积神经网络(CNN)、循环神经网络(RNN)等。
在Java中,可以通过DeepLearning4j来构建和部署深度学习模型。
1.深度学习模型的构建在构建深度学习模型时,我们需要定义模型的结构、损失函数、优化算法等。
通过DeepLearning4j提供的API,可以方便地构建各种深度学习模型。
java yuvimage 的用法
Java YuvImage是Android评台上用于处理YUV格式图像数据的类,它提供了方便的方法来处理和转换YUV图像数据。
在本文中,我们将介绍YuvImage类的基本用法,包括创建YuvImage对象、将YUV数据转换为RGB数据和将YuvImage保存为JPEG格式的图片。
一、创建YuvImage对象要创建一个YuvImage对象,我们需要提供YUV格式的图像数据、图像的颜色格式、图像的宽度和高度等信息。
以下是YuvImage类的构造函数:YuvImage(byte[] yuv, int format, int width, int height, int[] strides)其中,参数yuv是YUV格式的图像数据,format是图像的颜色格式,width和height分别是图像的宽度和高度,strides是每个平面的跨度。
在创建YuvImage对象之后,我们可以使用其提供的方法来对YUV图像数据进行处理和转换。
二、将YUV数据转换为RGB数据YUV格式是一种将亮度(Y)和色度(UV)分离的图像格式,它在存储和传输图像数据时可以节省带宽和存储空间。
但在实际显示和处理图像时,通常需要将YUV数据转换为RGB数据。
YuvImage类提供了一个方便的方法来将YUV数据转换为RGB数据:public booleanpressToJpeg(Rect rectangle, int quality, OutputStream stream)该方法可以将YuvImage对象表示的YUV图像数据压缩为JPEG格式的图片,并将结果写入指定的输出流。
参数rectangle指定要压缩的区域,quality指定压缩质量,stream是输出流。
三、将YuvImage保存为JPEG格式的图片除了将YUV数据直接转换为RGB数据外,我们还可以将YuvImage对象保存为JPEG格式的图片。
YuvImage类提供了一个方便的方法来实现这一功能:public booleanpressToJpeg(Rect rectangle, int quality, OutputStream stream)该方法与上一节中介绍的方法相同,可以将YuvImage对象表示的YUV图像数据压缩为JPEG格式的图片,并将结果写入指定的输出流。
通过Java实现人脸识别技术
通过Java实现人脸识别技术人脸识别技术是一种基于人脸生物特征进行身份验证和识别的技术。
随着人工智能和计算机视觉的发展,人脸识别技术得到了广泛的应用。
本文将介绍如何使用Java语言实现人脸识别技术,并通过示例代码展示其具体实现过程。
第一步:引入相关的Java库和依赖在使用Java实现人脸识别技术之前,我们需要引入一些相关的库和依赖。
在Java领域,有一些开源的人脸识别库可以使用,比如OpenCV和JavaCV。
首先,我们需要下载并配置OpenCV或JavaCV的相关库文件。
这些库文件中包含了实现人脸识别所需的算法和函数。
接下来,我们需要在Java项目中引入这些库文件。
具体的引入方式可以根据你的开发环境来调整,比如使用Maven等构建工具。
第二步:收集和准备训练数据在进行人脸识别之前,我们需要收集一些用于训练的人脸数据。
这些数据可以包括人脸图像和对应的标签,比如人物的姓名或ID。
收集到的人脸图像需要经过一定的预处理,比如对图像进行灰度化、直方图均衡化等操作,以提高识别的准确性和鲁棒性。
另外,将数据集划分为训练集和测试集也是一个重要的步骤。
通常,我们会使用80%的数据作为训练集,用于训练人脸识别模型;而将剩下的20%的数据作为测试集,用于评估模型的性能。
第三步:训练人脸识别模型在准备好训练数据后,我们就可以使用这些数据来训练人脸识别模型了。
通常,人脸识别模型可以使用一些经典的机器学习算法,比如支持向量机(SVM)或卷积神经网络(CNN)来训练。
在训练过程中,我们首先需要提取人脸图像中的特征。
常用的特征提取方法包括主成分分析(PCA)、线性判别分析(LDA)等。
这些方法可以将高维的人脸图像转换为低维的特征向量,以方便后续的分类。
然后,我们可以使用训练数据和对应的标签来训练分类器。
分类器可以根据输入的特征向量来判断人脸的身份。
在这个过程中,我们可以使用一些优化算法,比如梯度下降或遗传算法,来优化分类器的参数。
图像处理中的特征提取与识别
图像处理中的特征提取与识别图像处理是一项涉及数学、计算机科学等多个学科的综合性技术。
在图像处理的过程中,特征提取和识别是非常重要的步骤。
一、特征提取特征提取是通过数学算法和操作,将原始图像中的信息提取出来,以便于计算机进行分析和识别。
一个好的特征提取算法,应该能够准确地提取出不同类别的图像所具有的特征,并且能够排除其他不相关的信息。
在特征提取中,常用的方法有如下几种:1. 颜色特征提取颜色是图像中最基本的特征之一。
颜色特征提取可以通过计算每个像素的颜色分量来实现。
在颜色特征提取中,常用的方法有颜色矩和颜色直方图。
2. 纹理特征提取纹理是图像中的一个重要特征,它可以用来描述图像中物体表面的细节特征。
在纹理特征提取中,常用的方法有灰度共生矩阵和小波变换。
3. 形状特征提取形状是描述物体轮廓的一个特征,可以提供物体的基本信息。
在形状特征提取中,常用的方法有边缘检测和轮廓分析。
二、特征识别特征识别是将特征与已知类别的图像进行比较,通过比较结果来确定该图像所属的类别。
这个过程常用的方法包括分类器和神经网络等。
1. 分类器分类器是一种能够将样本分成不同类别的机器学习算法。
在特征识别中,常用的分类器有支持向量机、朴素贝叶斯、决策树等。
2. 神经网络神经网络是模拟人脑结构和工作原理的一种计算模型。
神经网络通过训练和学习,能够实现特征识别和分类。
在图像处理中,常用的神经网络包括卷积神经网络和循环神经网络等。
三、应用特征提取和识别在图像处理中有广泛的应用。
以下是几个常见的应用场景:1. 人脸识别人脸识别是一种非常广泛的应用场景,特征提取和识别在其中扮演了重要的角色。
通过提取人脸的特征,如眼睛、鼻子、嘴巴等,可以实现人脸的快速识别和匹配。
2. 车牌识别车牌识别是一种将车辆车牌信息自动识别和记录的技术。
通过提取车牌的颜色、字体等特征,可以实现车牌的自动识别。
3. 医学图像分析医学图像分析是一种将医学图像自动分析和诊断的技术。
java图像识别技术实例
java 图像识别技术实例用java语言实现。
首先用matlab实现了识别算法的仿真,因为只是对特定的数字组合的识别,所以非常的简单,放弃采用比较复杂的识别算法,采用最普通的像素比较的识别算法。
(如果背景噪声比较复杂,可以考虑先滤波后识别)在写 java程序的时候发现一些问题,网上关于图片像素级操作的资料不是太多,有的还不是太正确,特此写出自己的成果与大家分享。
核心类:BufferedImage,ImageIOImageIO类提供图象读写接口,可以对URL,InputStream等操作,得到图像信息十分的方便。
ImageIO在javax.imageio.*的包中,属于jdk中的标准类。
提供的方法有:read() 例:BufferedImage imd=ImageIO.read(new File(file));write() 例:ImageIO.write(imd, "JPEG", new File("C:\\test"+k+".gif"));//具体方法可以查找jdk docBufferedImage 类是一个Image类的子类,与Image不同的是,它是在内存中创建和修改的,你可以显示它也可以不显示它,这就看你的具体需求了。
这里因为我用于图像的识别所以就不需要显示出来了。
你可以通过ImageIO的方法来读取一个文件到BufferedImage,也可以将其写回一个文件中去。
类似的操作可以看前面的两个方法。
以及参考jdk doc因为我要识别类似于身份验证的一个数字串图片,所以我考虑把这些数字分离出来,存在不同的图像内,这里BufferedImage类提供一个很方便的办法。
getSubimage(int left,int top,int width,int height)例: B ufferedImage newim[]=new BufferedImage[4];newim[0]=imd.getSubimage(4,0,10,18);newim[1]=imd.getSubimage(13,0,10,18);newim[2]=imd.getSubimage(22,0,10,18);newim[3]=imd.getSubimage(31,0,10,18);最后为了得到图像的像素,我们需要的就是得到像素的方法,这个方法有很多,这里我介绍的是 得到特定像素点的RGB值。
在Java中实现人脸识别与指纹识别技术
在Java中实现人脸识别与指纹识别技术人脸识别和指纹识别技术是现代生物识别技术中应用广泛的两种方法。
在Java编程语言中,我们可以利用现有的库和工具来实现这两种技术。
本文将以实例为基础,介绍如何在Java中实现人脸识别和指纹识别技术。
人脸识别技术人脸识别是通过计算机分析和处理人脸图片,识别并验证或确认一个或多个个体的身份。
以下是在Java中实现人脸识别技术的步骤:1. 采集人脸图像。
首先,我们需要从图像或摄像头中采集人脸图像。
可以使用Java提供的图像处理库或第三方库,例如OpenCV,来获取摄像头数据并提取人脸图像。
2. 人脸检测。
使用人脸检测算法,将从图像中提取的人脸图像与已知的人脸进行比对。
Java中有很多开源的人脸检测算法库可供选择,例如DLib、Haar Cascade等。
通过调用这些库中的函数,我们可以实现人脸检测功能。
3. 特征提取。
在检测到人脸后,我们需要提取其特征。
常用的特征提取算法有主成分分析(PCA)、线性判别分析(LDA)等。
这些算法可以帮助我们把复杂的图像特征转化为更简单的数学特征。
4. 特征匹配与识别。
将提取的特征与预先存储在数据库中的特征进行比对。
可以在Java中使用数据库连接工具,如JDBC,将已知的人脸特征存储在数据库中,并通过查询语句完成特征匹配与识别。
指纹识别技术指纹识别是通过分析和处理指纹图像,识别并验证或确认一个人的身份。
以下是在Java中实现指纹识别技术的步骤:1. 采集指纹图像。
与人脸识别类似,我们首先需要采集指纹图像。
可以使用指纹采集设备或者已有的指纹图像进行后续处理。
Java中可以通过各种库和工具,如Fingerprint SDK、OpenCV等,获取指纹图像。
2. 指纹图像预处理。
对采集到的指纹图像进行预处理,包括图像增强、去噪等步骤。
Java提供了丰富的图像处理库和算法,例如图像滤波、边缘检测等,可以帮助我们对指纹图像进行预处理。
3. 特征提取。
java读取tiff格式图像、像素修改以及格式转换
java读取tiff格式图像、像素修改以及格式转换javatiff_0">java读取tiff图像的踩坑总结:1.环境:spring boot+maven2.包:imageio ,jai,codec,metadata;还有⼀个从github上⾯下载的。
这⼏个包都不⼤好找,等后续补上下载路径。
import javax.imageio.__;import javax.media.jai.JAI;import com.sun.media.jai.codec.;import com.github.jaiimageio.impl.plugins.tiff.*;主要就是这⼏个了,下⾯是接触到的有关代码。
注意:从外部下载的包加载到本地maven仓库需要使⽤cmd打开输⼊mvn install:install-file -DgroupId=com.sun.media -DartifactId=jai_codec -Dversion=1.1.3 -Dpackaging=jar -Dfile=E:\BaiduNetdiskDownload\jai_codec-1.1.3.jar metadatatiff_15">⾸先:metadata,是tiff图像的元数据,下⾯有两个⽅式。
1.调⽤tiffMetadataReader包,此⽅法⽐较简单,引⼊的包:import com.drew.imaging.tiff.TiffMetadataReader;import com.drew.imaging.tiff.TiffProcessingException;import com.drew.metadata.Directory;import com.drew.metadata.Metadata;import com.drew.metadata.Tag;import org.springframework.boot.autoconfigure.SpringBootApplication;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.util.Iterator;//详细过程:File file = new File("C:/Users/86156/Desktop/Show.tif");BufferedImage bufferedImage = ImageIO.read(file);String[] image = ImageIO.getWriterFileSuffixes();System.out.println(image);System.out.println(bufferedImage);try{Metadata metadata = TiffMetadataReader.readMetadata(file);//输出元数据信息System.out.println(metadata);}catch (tiffProcessingException e){System.out.println("发⽣进程异常");System.out.println(e);}catch (IOException e) {System.out.println("发⽣读取异常");}try{Metadata metadata = TiffMetadataReader.readMetadata(file);Iterable<Directory> a = metadata.getDirectories();for(Directory directory : a) {Iterator<Tag> tag = directory.getTags().iterator();while (tag.hasNext()) {System.out.println(tag.next());}}}catch(TiffProcessingException e){System.out.println("发⽣异常!");System.out.println(e);}System.out.println("执⾏完毕");如果出现读取时是空值:执⾏部分结果如下:包含了tiff图像的长宽和位数即16,这也为后⾯的⼤坑做了铺垫。
如何在JAVA中进行机器视觉与图像识别
如何在JAVA中进行机器视觉与图像识别引言:随着人工智能的快速发展,机器视觉和图像识别技术在各个领域得到了广泛应用。
作为一种常用的编程语言,JAVA也提供了丰富的工具和库来支持机器视觉和图像识别任务。
本文将介绍如何在JAVA中进行机器视觉和图像识别,包括图像处理、特征提取、模式识别等方面的内容。
一、图像处理图像处理是机器视觉和图像识别的基础,它包括对图像进行预处理、增强和分析等步骤。
在JAVA中,可以使用OpenCV库来进行图像处理。
OpenCV是一个开源的计算机视觉库,提供了丰富的图像处理函数和算法。
通过使用OpenCV,可以在JAVA中实现图像的读取、保存、缩放、旋转、滤波等操作。
二、特征提取特征提取是图像识别的关键步骤,它通过提取图像中的关键特征来进行分类和识别。
在JAVA中,可以使用SIFT(尺度不变特征变换)和SURF(加速稳健特征)等算法来进行特征提取。
这些算法能够有效地提取图像中的局部特征,并具有尺度不变性和旋转不变性等优点。
通过提取图像的特征,可以将其表示为一个向量或描述子,用于后续的分类和识别任务。
三、模式识别模式识别是机器视觉和图像识别的核心内容,它通过比较输入图像的特征向量和已知模式的特征向量来进行分类和识别。
在JAVA中,可以使用机器学习算法来进行模式识别。
常用的机器学习算法包括支持向量机(SVM)、人工神经网络(ANN)和决策树等。
这些算法能够从已知的训练样本中学习到模式的特征,并用于对新的图像进行分类和识别。
四、应用实例在JAVA中进行机器视觉和图像识别的应用非常广泛。
以下是一些常见的应用实例:1. 人脸识别:通过提取人脸特征和比对已知的人脸模式,实现对图像中人脸的自动识别和识别。
2. 文字识别:通过提取图像中的文字特征和比对已知的文字模式,实现对图像中文字的自动识别和转换。
3. 目标检测:通过提取目标特征和比对已知的目标模式,实现对图像中目标的自动检测和识别。
4. 图像分割:通过对图像进行分割和分析,实现对图像中不同区域的自动分割和识别。
Java的机器视觉技术实现像识别与像处理
Java的机器视觉技术实现像识别与像处理机器视觉技术是指让计算机系统模拟或辅助人类视觉能力的技术。
近年来,随着人工智能的快速发展,机器视觉在各种领域中的应用逐渐成为现实。
而Java作为一种广泛应用于软件开发的编程语言,也在机器视觉技术的实现中发挥着巨大的作用。
一、像识别的实现机器视觉中的像识别是指通过对图像进行分析和处理,实现对物体、人脸等进行识别和分类。
在Java中,有许多开源的机器视觉库可以帮助实现像识别的功能,如OpenCV和JavaCV等。
1. 图像处理在进行像识别之前,首先需要对图像进行处理。
Java中可以使用OpenCV提供的图像处理函数来实现。
通过这些函数,可以进行图像的灰度化、平滑化、边缘检测等操作,以提取出图像中的特征信息。
2. 特征提取特征提取是机器视觉中的重要步骤,它通过将图像中的像素值转换为可用于比较和分类的特征向量。
在Java中,可以使用各种机器学习算法来实现特征提取,如主成分分析(PCA)、线性判别分析(LDA)等。
3. 分类器训练与识别在像识别中,分类器的作用是根据给定的特征向量将图像分为不同的类别。
Java中可以使用机器学习库,如Weka和DL4J,来进行分类器的训练和识别。
这些库提供了各种常用的分类算法,如支持向量机(SVM)、决策树等。
二、像处理的实现像处理是指对图像进行各种操作和处理,以改变图像的外观或提取其中的信息。
在Java中,可以使用图像处理库ImageJ和JavaFX来实现像处理的功能。
1. 图像滤波图像滤波是图像处理中常用的操作之一,它可以对图像进行平滑化、锐化、边缘增强等。
Java中的ImageJ库提供了各种图像滤波函数,如高斯滤波、中值滤波等。
2. 图像变换图像变换是指将图像从一个颜色空间或坐标空间转换到另一个空间的操作。
在Java中,可以使用ImageJ提供的函数来实现图像的灰度化、RGB到HSV的转换等。
3. 目标检测目标检测是指在图像中识别和定位特定物体或区域的操作。
JAVA图像处理详解
JAVA图像处理详解2007-08-10 17:03如果你对图像处理感兴趣,而且需要使用GIF、JPEG和PNG以外的其它图像格式,或者希望改善JPEG图像处理的性能但不知道到哪里寻找适当的方法,或者需要通过几何运算(包括非线性变换)来处理图像,不必再为此苦恼了,答案就在这里——来自Sun公司的Java高级图像处理API和JAI图像I/O API 1.0 RC。
JAI API是Java Media API的一部分,与之相伴的还包括Java 2D API、Java 3D API、Java Speech API和其他一些API。
Java高级图像处理API是作为Java规范请求(JSP)34的一部分而开发的,是对J2SE version 1.3+版的扩展,主要用于处理图像。
最初发布的版本是1.0,JDC(Java Developer Connection)提供了一个预览版1.1.2 beta。
(最新进展情况请查阅README.html文件。
)与AWT 和Java 2D相比,JAI API提供了更丰富的图像处理,包括对许多通用图像操作的内在支持。
不过本文的目的不是讨论JAI API,而是伴随这些API但分离到它自己的可安装库中的一组图像读写器(codec)类,即Java高级图像处理图像I/O工具1.0 RC。
该RC提供了可以插接到J2SE 1.4的图像I/O框架上的一些功能。
作为JSR-15一部分而开发的图像I/O API提供了一个支持不同图像格式的可插拔框架。
标准J2SE 1.4版本身支持GIF、JPEG和PNG图像格式,而JAI图像I/O RC则提供了更多主流图像格式的编码解码器。
只要加上针对操作平台的适当版本,以前开发的应用程序就可以处理这些新的图像格式。
要理解JAI图像I/O工具的使用,需要首先了解图像I/O库。
在安装和介绍图像I/O工具包之前,我们先看一看图像I/O库。
图像I/O库图像I/O库是J2SE 1.4的标准API,放在javax.imageio包内。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
java像素级图像处理与识别方法
2008-06-21 19:00
转载,挺不错的文章
朋友要求帮忙做一个图片识别的小程序,因为要用在特定的环境下,所以决定采用java语言实现。
首先用matlab实现了识别算法的仿真,因为只是对特定的数字组合的识别,所以非常的简单,放弃采用比较复杂的识别算法,采用最普通的像素比较的识别算法。
(如果背景噪声比较复杂,可以考虑先滤波后识别)在写java程序的时候发现一些问题,网上关于图片像素级操作的资料不是太多,有的还不是太正确,特此写出自己的成果与大家分享。
核心类:BufferedImage,ImageIO
ImageIO类提供图象读写接口,可以对URL,InputStream等操作,得到图像信息十分的方便。
ImageIO在.*的包中,属于jdk中的标准类。
提供的方法有:
read() 例:BufferedImage imd=(new File(file));
write() 例:(imd, "JPEG", new File("C:\\test"+k+".gif"));
etRGB(j,i);
现在我们得到了像素,可以看出像素是一个一维数组,你如果不习惯可以考虑保存在一个二维的数组中,然后就来实施你的看家算法,什么小波变换,拉普拉斯算子,尽管来吧。
怎么样是不是很方便呢什么你好像看不太懂,好给你一些源程序好了,包括像素分解和识别算法。
源代码
/*
* Created on 2005-11-29
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package .*;
import
import
import .*;
import
import
import .*;
public class MyImage{ BufferedImage imd;mp");if")); =newim[k].getWidth(null);
=newim[k].getHeight(null);
pix=new int[iw*ih];
etRGB(j,i);
if(pix[i*(iw)+j]==-1)
pix[i*(iw)+j]=0;
else pix[i*(iw)+j]=1;
x[k]=x[k]+pix[i*(iw)+j];
}
}
//得到像匹配的数字。
int r=(pix);
(r);
"x="+x[k]);
}
}catch(Exception e){ ();
}
return ();
}
//数字模板0-9 static int[][] value={ //num 0;
{0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,1,0,0,0,0, 0,0,1,1,1,1,1,0,0,0, 0,0,1,1,0,0,1,1,0,0, 0,1,1,0,0,0,0,1,1,0, 0,1,1,0,0,0,0,1,1,0, 0,1,1,0,0,0,0,1,1,0, 0,1,1,0,0,0,0,1,1,0, 0,0,1,1,0,0,1,1,0,0, 0,0,0,1,1,1,1,0,0,0, 0,0,0,0,1,1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0 },
//num 1
{0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,1,1,0,0,0, 0,0,0,0,1,1,1,0,0,0, 0,0,0,1,1,1,1,0,0,0, 0,0,0,0,0,1,1,0,0,0, 0,0,0,0,0,1,1,0,0,0, 0,0,0,0,0,1,1,0,0,0, 0,0,0,0,0,1,1,0,0,0, 0,0,0,0,0,1,1,0,0,0, 0,0,0,0,0,1,1,0,0,0, 1,1,1,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
},
//num2
,
//num3
,
//num4
,
//num5
,
//num6
,
//num7
,
//num8
,
//num9
};
//图像像素相减取绝对值得到最小熵的结果。
public int getMatchNum(int[] pix){
int result=-1;
int temp=100;
int x;
for(int k=0;k<=9;k++){
x=0;
for(int i=0;i
x=x+(pix[i]-value[k][i]);
}
/*for(int a=0;a<18;a++){ for(int b=0;b<10;b++){ "-"+value[k][a*10+b]+"|");
}
}*/
if(x
{
temp=x;
result=k;
}
}
return result; }
}。