我有以下代码:
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”
谢谢
答案 0 :(得分:1)
问问自己,如果没有,会发生什么? 它只取决于单位的百分比,百分比是多少?每像素RGB单位? 关于255,每种颜色有一个字节:所以8位,8的2次幂是256意味着0到255 =每种颜色分量256种可能性。
答案 1 :(得分:1)
每个像素由3个颜色分量组成:
这些颜色分量中的每一个都表示为单个字节 - 即8位。可以用字节表示的最大值是255.
因此,为了计算百分比的差异,您可以计算所有像素的所有颜色分量的差异总和,并除以此总和...
答案 2 :(得分:0)
n次255是可能的最大差异。也就是说,如果所有颜色的差异为255.diff是实际差异。要获得百分比,您必须将实际除以总数并乘以100.0
顺便说一下:
diff / n / 255 = diff / (n * 255)
答案 3 :(得分:0)
它用于24位颜色深度和图片大小的标准化目的。循环中的迭代将精确地运行n / 3次,并且在每次迭代中,diff将增加3个数字,范围为[0-255]。
答案 4 :(得分:0)
看起来diff变量保存图像所有像素(宽度*高度)的所有颜色(红色+绿色+蓝色)的总和。
所以:
double n = width1 * height1 * 3;
保存信息您添加每个像素的颜色差异的次数。 RGB的颜色值介于0到255之间。
p变量范围介于0和1之间,因此必须将diff除以n和255。
然后在输出时,你只需将p乘以100得到百分比。