`

java 图像识别技术实例

阅读更多

java语言实现。首先用matlab实现了识别算法的仿真,因为只是对特定的数字组合的识别,所以非常的简单,放弃采用比较复杂的识别算法,采用最普通的像素比较的识别算法。(如果背景噪声比较复杂,可以考虑先滤波后识别)在写 java程序的时候发现一些问题,网上关于图片像素级操作的资料不是太多,有的还不是太正确,特此写出自己的成果与大家分享。

核心类:BufferedImageImageIO
ImageIO
类提供图象读写接口,可以对URLInputStream等操作,得到图像信息十分的方便。
ImageIO
javax.imageio.*的包中,属于jdk中的标准类。提供的方法有:
read() 
例:BufferedImage imd=ImageIO.read(new File(file));
write()
例:ImageIO.write(imd, "JPEG", new File("C:\\test"+k+".gif"));
//
具体方法可以查找jdk doc
BufferedImage
类是一个Image类的子类,与Image不同的是,它是在内存中创建和修改的,你可以显示它也可以不显示它,这就看你的具体需求了。这里因为我用于图像的识别所以就不需要显示出来了。你可以通过ImageIO的方法来读取一个文件到BufferedImage,也可以将其写回一个文件中去。类似的操作可以看前面的两个方法。以及参考jdk doc
因为我要识别类似于身份验证的一个数字串图片,所以我考虑把这些数字分离出来,存在不同的图像内,这里BufferedImage类提供一个很方便的办法。
getSubimage(int left,int top,int width,int height)
例:    BufferedImage 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);
最后为了得到图像的像素,我们需要的就是得到像素的方法,这个方法有很多,这里我介绍的是
getRGB(int x,int y)
得到特定像素点的RGB值。
例: pix=new int[10*18];pix[i*(10)+j]=newim[k].getRGB(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 com.syvin.image;

import java.awt.*;
import java.awt.image.*;
import java.io.FileOutputStream;
import java.io.*;
import java.io.InputStream;
import java.net.URL;
import javax.imageio.*;
public class MyImage{
   BufferedImage imd;//
待识别图像

private int iw,ih;//图像宽和高

public final static String path="D:\\jyy\\app\\tomcat\\webapps\\userlogon\\a.jpg";

  static public void main(String args[]) {
   try{
   MyImage app = new MyImage();//
构造一个类
  
   String s=app.getImageNum("C:\\
无标题.bmp");//得到识别字符串
   System.out.println("recognize result"+s);
   byte[] by=s.getBytes();
   File f=new File("C:\\testfile.txt");
   FileOutputStream fos=new FileOutputStream(f);//
写入一个结果文件
   fos.write(by);
   fos.close();
   }catch(Exception e){
    e.printStackTrace();
   }
  }

//构造函数
  public MyImage() throws IOException {
  
    super("Image Test");
    try{
    }catch(Exception e){
     e.printStackTrace();
    }
  }
//
得到图像的值
  public String getImageNum(String file){
  
   StringBuffer sb=new StringBuffer("");
   try{
   imd=ImageIO.read(new File(file));//
ImageIO的静态方法读取图像
BufferedImage newim[]=new BufferedImage[4];
int []x=new int[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);

for(int k=0;k<4;k++){
 

x[k]=0;

ImageIO.write(newim[k], "JPEG", new File("C:\\test"+k+".gif"));
this.iw=newim[k].getWidth(null);
this.ih=newim[k].getHeight(null);
pix=new int[iw*ih];

//因为是二值图像,这里的方法将像素读取出来的同时,转换为01的图像数组。
for(int i=0;i
  for(int j=0;j
   pix[i*(iw)+j]=newim[k].getRGB(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=this.getMatchNum(pix);
sb.append(r);
System.out.println("x="+x[k]);
}
   }catch(Exception e){
    e.printStackTrace();
   }
return sb.toString();
}
//
数字模板 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,
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,
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+Math.abs(pix[i]-value[k][i]);
   
    }
    /*for(int a=0;a<18;a++){
     for(int b=0;b<10;b++){
      System.out.print(pix[a*10+b]+"-"+value[k][a*10+b]+"|");
    
     }
     System.out.println();
   
    }*/
   
    if(x
    {
     temp=x;
     result=k;
    }
   
   }
 
   return result;
  }
 

}

 

分享到:
评论

相关推荐

    java图像识别技术实例(20211219025727).pdf

    java图像识别技术实例(20211219025727).pdf

    java_图像识别技术实例

    java_图像识别技术实例.docjava_图像识java_图像识别技术实例.doc别技术实例.docjava_图像识别技术实例.doc

    java图像识别技术实例教程

    运用核心类:BufferedImage,ImageIOImageIO类提供图象读写接口,可以对URL,InputStream等操作,得到图像信息十分的方便。ImageIO在javax.imageio.*的包中,属于jdk中的标准类。提供的方法有:

    JAVA上百实例源码以及开源项目源代码

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    Java OCR tesseract 图像智能文字字符识别技术实例代码

    主要介绍了Java OCR tesseract 图像智能文字字符识别技术实例代码,非常具有实用价值,需要的朋友可以参考下

    JAVA上百实例源码以及开源项目

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    java范例开发大全

    实例264 泛型类的类型识别示例 523 实例265 强制类型转换示例 525 14.3 擦拭 526 实例266 无限界的擦拭 526 实例267 有限界的擦拭 527 14.4 集合泛型类 528 实例268 Hashtable的泛型化 528 实例269 多功能画笔 529 ...

    简述Java图像倾斜方法及实例 原创

    主要介绍了Java图像倾斜的方法及实例,需要的朋友可以参考下

    Java开发技术大全(500个源代码).

    differ.java 测试静态方法与实例方法之间的区别 forefather.java 一个简单的基类 grandson.java 上面这个类的子类 hasConstructor.java 拥有构造器的类 hasFinalFun.java 拥有最终方法的类 hasRecall.java ...

    人脸识别检测opencv简单java实现

    人脸识别检测opencv简单java实现要不是毕业好几年我都不舍得分享出来!!! CTRL+D收藏一下或者关注走一波-有你所需!不断更新! 其他相关下载,配套代码以及PPT。稳妥的小老弟 ...加载本地的OpenCV库,这样就可以用它...

    Java范例开发大全(全书源程序)

    Java范例开发大全(全书源程序),目录如下: 第1篇 Java编程基础 第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 ...实例264 泛型类的类型识别示例 523 实例265...

    Java图像分析库CognitiveJ.zip

    CognitiveJ 是一个开源的 Java 图像分析库,可轻松实现对图像检测、解析以及人脸识别和特征识别的功能。强大的功能包括:Facial Detection: Capture faces, gender, age, associated facial features, and ...

    java范例开发大全源代码

     第4篇 Java高级开发技术  第12章 集合(教学视频:45分钟) 358  12.1 Set 358  实例204 利用HashSet删除学生 358  实例205 不重复的随机数序列 360  实例206 运用映射的相关类(Map) 363  ...

    Java范例开发大全 (源程序)

     第4篇 Java高级开发技术  第12章 集合(教学视频:45分钟) 358  12.1 Set 358  实例204 利用HashSet删除学生 358  实例205 不重复的随机数序列 360  实例206 运用映射的相关类(Map) 363  实例207 ...

    java范例开发大全(pdf&源码)

    第1篇 Java编程基础 第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 ...实例264 泛型类的类型识别示例 523 实例...

    tesseract安装包及JAVA代码实例

    光学字符识别(OCR,Optical Character Recognition)是指对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程。OCR技术非常专业,一般多是印刷、打印行业的从业人员使用,可以快速的将纸质资料...

    OCR图片识别实例源码

    java的OCR图片识别文字内容的项目源码。

    java数字图片识别Asprise-OCR-Java-Windows_XP_32bit-4.0\Asprise-OCR-Java-Windows_XP_32bit-4.0.rar

    3、开发实例代码:(实例代码)ParseJPEG_withOCR.java 4.CloseWin.exe是销毁本sdk调用dll是弹出的Asprise购买提示,在进行批量识别图片时把CloseWin.exe同时运行就好了,这样就解除了弹出购买窗口这个问题 5.文件夹...

Global site tag (gtag.js) - Google Analytics