JAVA比較兩張圖相似度


代碼:

package com.uiwho.com; import javax.imageio.*; import java.awt.image.*; import java.awt.*;//Color import java.io.*; public class PhotoDigest { public static void main(String[] args) throws Exception { float percent = compare(getData("C:/Users/Administrator/Desktop/1.jpg"), getData("C:/Users/Administrator/Desktop/2.png")); if(percent==0){ System.out.println("無法比較"); }else{ System.out.println("兩張圖片的相似度為:" + percent + "%"); } } public static int[] getData(String name) { try{ BufferedImage img = ImageIO.read(new File(name)); BufferedImage slt = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB); slt.getGraphics().drawImage(img, 0, 0, 100, 100, null); // ImageIO.write(slt,"jpeg",new File("slt.jpg")); int[] data = new int[256]; for (int x = 0; x < slt.getWidth(); x++) { for (int y = 0; y < slt.getHeight(); y++) { int rgb = slt.getRGB(x, y); Color myColor = new Color(rgb); int r = myColor.getRed(); int g = myColor.getGreen(); int b = myColor.getBlue(); data[(r + g + b) / 3]++; } } // data 就是所謂圖形學當中的直方圖的概念 return data; }catch(Exception exception){ System.out.println("有文件沒有找到,請檢查文件是否存在或路徑是否正確"); return null; } } public static float compare(int[] s, int[] t) { try{ float result = 0F; for (int i = 0; i < 256; i++) { int abs = Math.abs(s[i] - t[i]); int max = Math.max(s[i], t[i]); result += (1 - ((float) abs / (max == 0 ? 1 : max))); } return (result / 256) * 100; }catch(Exception exception){ return 0; } } }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM