原文:http://www.open-open.com/code/view/1448334323079

  1. import java.awt.image.BufferedImage;
  2. import java.io.File;
  3. import javax.imageio.ImageIO;
  4.  
  5. /**
  6. * 比较两张图片的相似度
  7. * @author Guihua
  8. *
  9. */
  10. public class BMPLoader {
  11. // 改变成二进制码
  12. public static String[][] getPX(String args) {
  13. int[] rgb = new int[3];
  14.  
  15. File file = new File(args);
  16. BufferedImage bi = null;
  17. try {
  18. bi = ImageIO.read(file);
  19. } catch (Exception e) {
  20. e.printStackTrace();
  21. }
  22.  
  23. int width = bi.getWidth();
  24. int height = bi.getHeight();
  25. int minx = bi.getMinX();
  26. int miny = bi.getMinY();
  27. String[][] list = new String[width][height];
  28. for (int i = minx; i < width; i++) {
  29. for (int j = miny; j < height; j++) {
  30. int pixel = bi.getRGB(i, j);
  31. rgb[0] = (pixel & 0xff0000) >> 16;
  32. rgb[1] = (pixel & 0xff00) >> 8;
  33. rgb[2] = (pixel & 0xff);
  34. list[i][j] = rgb[0] + "," + rgb[1] + "," + rgb[2];
  35.  
  36. }
  37. }
  38. return list;
  39.  
  40. }
  41.  
  42. public static void compareImage(String imgPath1, String imgPath2){
  43. String[] images = {imgPath1, imgPath2};
  44. if (images.length == 0) {
  45. System.out.println("Usage >java BMPLoader ImageFile.bmp");
  46. System.exit(0);
  47. }
  48.  
  49. // 分析图片相似度 begin
  50. String[][] list1 = getPX(images[0]);
  51. String[][] list2 = getPX(images[1]);
  52. int xiangsi = 0;
  53. int busi = 0;
  54. int i = 0, j = 0;
  55. for (String[] strings : list1) {
  56. if ((i + 1) == list1.length) {
  57. continue;
  58. }
  59. for (int m=0; m<strings.length; m++) {
  60. try {
  61. String[] value1 = list1[i][j].toString().split(",");
  62. String[] value2 = list2[i][j].toString().split(",");
  63. int k = 0;
  64. for (int n=0; n<value2.length; n++) {
  65. if (Math.abs(Integer.parseInt(value1[k]) - Integer.parseInt(value2[k])) < 5) {
  66. xiangsi++;
  67. } else {
  68. busi++;
  69. }
  70. }
  71. } catch (RuntimeException e) {
  72. continue;
  73. }
  74. j++;
  75. }
  76. i++;
  77. }
  78.  
  79. list1 = getPX(images[1]);
  80. list2 = getPX(images[0]);
  81. i = 0;
  82. j = 0;
  83. for (String[] strings : list1) {
  84. if ((i + 1) == list1.length) {
  85. continue;
  86. }
  87. for (int m=0; m<strings.length; m++) {
  88. try {
  89. String[] value1 = list1[i][j].toString().split(",");
  90. String[] value2 = list2[i][j].toString().split(",");
  91. int k = 0;
  92. for (int n=0; n<value2.length; n++) {
  93. if (Math.abs(Integer.parseInt(value1[k]) - Integer.parseInt(value2[k])) < 5) {
  94. xiangsi++;
  95. } else {
  96. busi++;
  97. }
  98. }
  99. } catch (RuntimeException e) {
  100. continue;
  101. }
  102. j++;
  103. }
  104. i++;
  105. }
  106. String baifen = "";
  107. try {
  108. baifen = ((Double.parseDouble(xiangsi + "") / Double.parseDouble((busi + xiangsi) + "")) + "");
  109. baifen = baifen.substring(baifen.indexOf(".") + 1, baifen.indexOf(".") + 3);
  110. } catch (Exception e) {
  111. baifen = "0";
  112. }
  113. if (baifen.length() <= 0) {
  114. baifen = "0";
  115. }
  116. if(busi == 0){
  117. baifen="100";
  118. }
  119.  
  120. System.out.println("相似像素数量:" + xiangsi + " 不相似像素数量:" + busi + " 相似率:" + Integer.parseInt(baifen) + "%");
  121.  
  122. }
  123.  
  124. public static void main(String[] args){
  125. BMPLoader.compareImage("E:\\12.bmp", "E:\\1.bmp");
  126. }
  127. }

JAVA 比较两张图片的相似度的代码的更多相关文章

  1. Java 比较两张图片的相似度

    import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; /** * 比较两张图片 ...

  2. JAVA比较两张图相似度

    代码: package com.uiwho.com; import javax.imageio.*; import java.awt.image.*; import java.awt.*;//Colo ...

  3. java实现把两张图片合并(Graphics2D)

    package com.yin.text; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.i ...

  4. Java 比较两个字符串的相似度算法(Levenshtein Distance)

    转载自: https://blog.csdn.net/JavaReact/article/details/82144732 算法简介: Levenshtein Distance,又称编辑距离,指的是两 ...

  5. opencv_判断两张图片是否相同

    QQ:231469242 pip install opencv 如果找不到版本,去非官方下载opencv第三方包http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下 ...

  6. java开发两年,连这些多线程知识都还没掌握,你凭什么涨薪!

    并发与并行 并发:两个或者多个事件在同一时间段发生(交替执行) 并行:两个或者多个事件在同一时刻发生(cpu多核.同时执行) 线程与进程 进程:是一个内存中运行的应用程序,有自己独立的内存空间,一个应 ...

  7. 【C#】对两张图片进行矩阵运算会怎么样?

    对两张图片进行矩阵运算会怎么样? 在学习<线性代数>的矩阵运算时,突然想到图片也可以算是一种矩阵,那么对图片进行矩阵的运算会出现什么样的效果呢?为了满足好奇,便用C#写了个对图片进行矩阵运 ...

  8. java使double保留两位小数的多方法 java保留两位小数

    这篇文章主要介绍了java使double类型保留两位小数的方法,大家参考使用吧 复制代码 代码如下: mport java.text.DecimalFormat; DecimalFormat    d ...

  9. java比较两个对象是否相等的方法

    java比较两个对象是否相等直接使用equals方法进行判断肯定是不会相同的. 例如: Person  person1  =new Person("张三"); Person  pe ...

随机推荐

  1. js中的函数编程

    之前在网上看到了一篇教你如何用js写出装逼的代码. 经过学些以及扩展很有收获在这里记录一下. 原文章找不到了.所以就不在这附上链接了. 大家看下下面两段js代码. 上面两端代码效果是一模一样的,都是在 ...

  2. npm与cnpm

    npm介绍 说明:npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安装.卸载.管理依赖等) 使用npm安装插件:命令提示符执行npm instal ...

  3. linux部署全流程(未完)

    一.环境搭建 1.jdk 2.tomcat 3.nginx 4.redis 推荐工具:winSCP(用来传输文件).SecureCRT(用来执行命令) 1.jdk 下载地址:https://www.o ...

  4. webpack、node、npm之间的关系

    webpack能够把.vue后缀名的文件打包成浏览器能够识别的js 而这个.vue文件装换需要打包器vue-loader 这个vue-loader打包器是可以从npm上面下载(npm上面有很多资源包) ...

  5. Java BufferedReader文件读取 带缓冲区的字符流

    package org.jimmy.autosearch2019.test; import java.io.BufferedReader; import java.io.FileInputStream ...

  6. VS打开文件,解决方案资源管理器自动定位到文件位置

    打开 工具-->选项-->项目和解决方案-->常规,勾选“在解决方案资源管理器中跟踪活动项”

  7. 基于jquery的自定义显示消息数量

    根据需求简单的实现一个小功能控件,暂时不支持扩展 $("xxxxxxx").iconCountPlugin(options, start, isOffset) {//三个参数,自定 ...

  8. 17. PROCESSLIST

    17. PROCESSLIST PROCESSLIST表提供有关正在运行的线程的信息. PROCESSLIST表有以下列: ID :连接标识符. 这是SHOW PROCESSLIST语句的Id列中显示 ...

  9. 第一次:从今开始玩Linux,Ubuntu16.04

    首先声明,我的文章不配图,就靠文字描述,然后自己体会,摸着石头体验吧! 从今天开始玩Linux,Ubuntu16.04据说是比较稳定的,界面友好,类似与Windows界面,也有Linux的命令终端,用 ...

  10. SVN服务器的部署与安装

    需要下载并安装VisualSVN,TortoiseSVN,VisualSVN-Server三个工具. 其中VisualSVN是SVN针对VisualStudio的插件: TortoiseSVN是客户端 ...