我们强烈建议你参考以下帖子, 以此作为前提。
- 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上运行, 因为它需要驱动器中的映像。
输出如下:
输入图像:
输出:差异百分比–> 2.843600130405922
输入图像:
输出:差异百分比–> 6.471412648669786
输入图像:
输出:差异百分比–> 0.0
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
评论前必须登录!
注册