我有以下代码:
for (int i = 0; i < height1; i++) {
for (int j = 0; j < width1; j++) {
int rgb1 = img1.getRGB(i, j);
int rgb2 = img2.getRGB(i, j);
int r1 = (rgb1 >> 16) & 0xff;
int g1 = (rgb1 >> 8) & 0xff;
int b1 = (rgb1 ) & 0xff;
int r2 = (rgb2 >> 16) & 0xff;
int g2 = (rgb2 >> 8) & 0xff;
int b2 = (rgb2 ) & 0xff;
diff += Math.abs(r1 - r2);
diff += Math.abs(g1 - g2);
diff += Math.abs(b1 - b2);
}
}
double n = width1 * height1 * 3;
double p = diff / n / 255.0;
System.out.println("diff percent: " + (p * 100.0));
代码是用来求图像之间差异的百分比,但我不知道为什么百分比要除以“n”和“255.0”
谢谢
最佳答案
每个像素由 3 个颜色分量组成:
- R - 红色分量
- G - 绿色分量
- B - 蓝色分量
每个颜色分量都表示为一个字节 - 即 8 位。一个字节可以表示的最大值是255。
因此,为了计算百分比差异,您需要计算所有像素的所有颜色分量的差异之和,然后除以该总和...
- 通过像素个数,得到每个像素的平均差异
- 除以 3,以获得每个颜色分量的平均差异
- 乘以 255,获得 0.0 到 1.0 之间的值,该值可以转换为百分比值
关于Java - 这段代码的解释是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22606635/