Java中的图像处理S14(两个图像的比较)

我们强烈建议你参考以下帖子, 以此作为前提。

  • Java中的图像处理S1(读和写)
  • Java中的图像处理S2(获取并设置像素)
在本文中, 我们将学习如何比较两个给定的图像(必须具有相同的尺寸)并打印它们之间的差异百分比。
算法:
步骤1 –检查两个图像的尺寸是否匹配。
步骤2 –获取两个图像的RGB值。
步骤3 –计算三个颜色分量的两个相应像素中的差异。
步骤4 –对图像的每个像素重复步骤2-3。
步骤5 –通过将差异之和除以计算百分比:
  • 像素数, 以获得每个像素的平均差
  • 3, 获得每个颜色成分的平均差
  • 255, 以获得介于0.0和1.0之间的值, 该值可以转换为百分比值
实现
//Java Program to compare two images import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import java.io.File; import java.io.IOException; class ImageComparision { public static void main(String[] args) { BufferedImage imgA = null ; BufferedImage imgB = null ; try { File fileA = new File( "/home /pratik /" + " Desktop /image1.jpg" ); File fileB = new File( "/home /pratik /" + " Desktop /image2.jpg" ); imgA = ImageIO.read(fileA); imgB = ImageIO.read(fileB); } catch (IOException e) { System.out.println(e); } int width1 = imgA.getWidth(); int width2 = imgB.getWidth(); int height1 = imgA.getHeight(); int height2 = imgB.getHeight(); if ((width1 != width2) || (height1 != height2)) System.out.println( "Error: Images dimensions" + " mismatch" ); else { long difference = 0 ; for ( int y = 0 ; y < height1; y++) { for ( int x = 0 ; x < width1; x++) { int rgbA = imgA.getRGB(x, y); int rgbB = imgB.getRGB(x, y); int redA = (rgbA> > 16 ) & 0xff ; int greenA = (rgbA> > 8 ) & 0xff ; int blueA = (rgbA) & 0xff ; int redB = (rgbB> > 16 ) & 0xff ; int greenB = (rgbB> > 8 ) & 0xff ; int blueB = (rgbB) & 0xff ; difference += Math.abs(redA - redB); difference += Math.abs(greenA - greenB); difference += Math.abs(blueA - blueB); } }//Total number of red pixels = width * height //Total number of blue pixels = width * height //Total number of green pixels = width * height //So total number of pixels = width * height * 3 double total_pixels = width1 * height1 * 3 ; //Normalizing the value of different pixels //for accuracy(average pixels per color //component) double avg_different_pixels = difference / total_pixels; //There are 255 values of pixels in total double percentage = (avg_different_pixels / 255 ) * 100 ; System.out.println( "Difference Percentage--> " + percentage); } } }

注意:代码将无法在在线IDE上运行, 因为它需要驱动器中的映像。
输出如下:
输入图像:
Java中的图像处理S14(两个图像的比较) Java中的图像处理S14(两个图像的比较) 输出:差异百分比–> 2.843600130405922
输入图像:
Java中的图像处理S14(两个图像的比较) Java中的图像处理S14(两个图像的比较) 输出:差异百分比–> 6.471412648669786
输入图像:
Java中的图像处理S14(两个图像的比较) Java中的图像处理S14(两个图像的比较) 输出:差异百分比–> 0.0
【Java中的图像处理S14(两个图像的比较)】如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

    推荐阅读