我们强烈建议你参考以下帖子, 以此作为前提。
- 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
【Java中的图像处理S14(两个图像的比较)】如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
推荐阅读
- Java中使用OpenCV进行图像处理|S14(清晰度增强)
- Java中的图像处理S12(对比度增强)
- Java中的图像处理S11(图像的更改方向)
- Java中的图像处理S10(为图像加水印)
- Java中的图像处理S9(人脸检测)
- Java中的图像处理S8(创建镜像)
- Java中的图像处理S7(创建随机像素图像)
- Java中的图像处理S5(彩色图像转为红色,绿色,蓝色图像)
- 每日LeetCode力扣(21~25)