图片相识度比较

最近项目要用到图片对比,上网搜了一下。有2中方法!
第一种 Java实现图片比对(1)-MD5方式
这是地址:http://chenxu-8456.iteye.com/blog/1322014
你们可以看一下,我按照这个方法弄了一下。代码有个错误后来也解决了...这里就不讲哪点错了,因为这个方法完全坑爹。没用只能比较是不是同一个图片,而不是2个图片进行比较。
第二种 Java实现图片比对(2)-逐像素对比
http://chenxu-8456.iteye.com/blog/1322020
这个方法一看就比较靠谱,果断弄下来。报错,结果是要导入JAVA awt包。果断导入!结果编译没问题,就是运行的时候就报错,说是JAVA虚拟机不支持。后来改变导入方法后能运行了,结果一点击图片对比,就包找不到awt类!我靠~~~太霉。。。一直以为是包导入错了。试了各种方法!最后还是放弃了~~~android不支持java的awt包呀!
最后实在没办法,网上有人说android的bitmap有很多方法能够替代awt包。就朝这个方向努力吧!看了看第二种实现的方式,就按照这个来了,最后居然可以了~~~~
话不多说直接贴代码:
Java code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package  com.xupp.sxjiesuo;
 
import  java.text.DecimalFormat;
 
import  android.R.integer;
import  android.graphics.Bitmap;
import  android.graphics.BitmapFactory;
 
/**
  * Android图片对比(像素精准对比),速度较慢建议用多线程获取
  * @author xupp
  * @createData 2013-7-18
  */
 
public  class  PictureContrast {
     private  static  int  t =  0 ;
     private  static  int  f =  0 ;
     public  static  String similarity (String url_one,String url_two) {
         //把图片转换为Bitmap
         Bitmap bm_one = BitmapFactory.decodeFile(url_one);
         Bitmap bm_two = BitmapFactory.decodeFile(url_two);
         //保存图片所有像素个数的数组,图片宽×高
         int [] pixels_one =  new  int [bm_one.getWidth()*bm_one.getHeight()];
         int [] pixels_two =  new  int [bm_two.getWidth()*bm_two.getHeight()];
         //获取每个像素的RGB值
         bm_one.getPixels(pixels_one, 0 ,bm_one.getWidth(), 0 , 0 ,bm_one.getWidth(),bm_one.getHeight());
         bm_two.getPixels(pixels_two, 0 ,bm_two.getWidth(), 0 , 0 ,bm_two.getWidth(),bm_two.getHeight());
         //如果图片一个像素大于图片2的像素,就用像素少的作为循环条件。避免报错
         if  (pixels_one.length >= pixels_two.length) {
             //对每一个像素的RGB值进行比较
             for ( int  i =  0 ; i < pixels_two.length; i++){
                 int  clr_one = pixels_one[i];
                 int  clr_two = pixels_two[i];
                 //RGB值一样就加一(以便算百分比)
                 if  (clr_one == clr_two) {
                     t++;
                 } else  {
                     f++;
                    }
             }
         } else  {
             for ( int  i =  0 ; i < pixels_one.length; i++){
                 int  clr_one = pixels_one[i];
                 int  clr_two = pixels_two[i];
                 if  (clr_one == clr_two) {
                     t++;
                 } else  {
                     f++;
                 }
             }
             
         }
         
         return  "相似度为:" +myPercent(t,t+f);
         
     }
     /**
      * 百分比的计算
      * @author xupp
      * @param y(母子)
      * @param z(分子)
      * @return 百分比(保留小数点后两位)
      */
     public  static  String myPercent( int  y, int  z)
     {
         String baifenbi= "" ; //接受百分比的值
          double  baiy=y* 1.0 ;
         double  baiz=z* 1.0 ;
         double  fen=baiy/baiz;
         DecimalFormat df1 =  new  DecimalFormat( "00.00%" );  //##.00%   百分比格式,后面不足2位的用0补齐 
         baifenbi= df1.format(fen);
         return  baifenbi;
     }
     
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值