前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA 比较两张图片的相似度的代码

JAVA 比较两张图片的相似度的代码

原创
作者头像
大师级码师
修改2021-09-23 14:33:26
1.9K0
修改2021-09-23 14:33:26
举报
文章被收录于专栏:大师级码师大师级码师
代码语言:javascript
复制
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
/**

比较两张图片的相似度
@author Guihua
/
public class BMPLoader {
 // 改变成二进制码
 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 void compareImage(String imgPath1, String imgPath2){

 String[] images = {imgPath1, imgPath2};
 if (images.length == 0) {
     System.out.println("Usage >java BMPLoader ImageFile.bmp");
     System.exit(0);
 }

 // 分析图片相似度 begin
 String[][] 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) + "%");


}
public static void main(String[] args){

 BMPLoader.compareImage("E:\\12.bmp", "E:\\1.bmp");

}
}
</pre> 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档