Java - 这段代码的解释是什么?

标签 java image

我有以下代码:

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/

相关文章:

java - <img> 标签的 src 属性中的请求未处理

java - 无法停止工作线程,可能会造成内存泄漏。

javascript - 由多个图像文件组成的响应式 map

linux - 将所有图像放入数据库或文件夹中

java - 如何将两个扩展的 JPanel 类加载到一个 JFrame 中?

c++ - OpenCV:输出图像为蓝色

java - ResultSet 和 ResultSetMetaData 之间的交互是单向的吗?

java - Android Studio 无法解析符号 "container"和 "PlaceHolderFragment"

java - 使用startActivity()时出现运行时错误

ios - 大型图像收集应用程序的内存管理