Java 字节的平均值

Java 字节的平均值,java,image,bytearray,average,Java,Image,Bytearray,Average,我有这样一个问题。我想从几张不同的照片中做出“平均”的图像。我的想法是按顺序将它们加载到图像缓冲区,对每个位的值求和,而不仅仅是除以照片的数量。问题是我不能将字节[]除以数字。我做错了什么,或者正确的方法是什么 File[] others = getOtherImageFiles(file); byte[][] pixels = new byte[300][]; List<byte[][]> pixelsList = new ArrayList<byte[][]>();

我有这样一个问题。我想从几张不同的照片中做出“平均”的图像。我的想法是按顺序将它们加载到图像缓冲区,对每个位的值求和,而不仅仅是除以照片的数量。问题是我不能将字节[]除以数字。我做错了什么,或者正确的方法是什么

File[] others = getOtherImageFiles(file);
byte[][] pixels = new byte[300][];
List<byte[][]> pixelsList = new ArrayList<byte[][]>();
for (int i = 0; i < others.length; i++) {
  try {
    img = ImageIO.read(others[i]);
  } catch (IOException e) {
  }
  for (int x = 0; x < img.getWidth(); x++) {
    pixels[x] = new byte[img.getHeight()];
    for (int y = 0; y < img.getHeight(); y++) {
      pixels[x][y] = (byte) (img.getRGB(x, y));
    }
  }
  pixelsList.add(pixels);
}
byte[][] pixelsSum = new byte[300][];
for (int i = 0; i < pixelsList.size(); i++) {
  for (int x = 0; x < img.getWidth(); x++) {
    for (int y = 0; y < img.getHeight(); y++) {
      pixelsSum[x][y] += pixelsList.get(i)[x][y];
    }
  }
}
for (int x = 0; x < img.getWidth(); x++) {
  for (int y = 0; y < img.getHeight(); y++) {
    pixelsSum[x][y]/10;
  }
}
}
File[]others=getOtherImageFiles(文件);
字节[][]像素=新字节[300][];
列表像素列表=新的ArrayList();
for(int i=0;i

我想将它们用作面比较器,重点是创建面方案。

而不是这组循环:

for (int i = 0; i < pixelsList.size(); i++) {
  for (int x = 0; x < img.getWidth(); x++) {
    for (int y = 0; y < img.getHeight(); y++) {
      pixelsSum[x][y] += pixelsList.get(i)[x][y];
    }
  }
}

这应该立即计算平均值,而不是再次循环通过
pixelsum
数组。另请注意,与仅限于在数字上下文中进行除法的
/=
运算符相比,使用了执行除法和赋值的
/
运算符。您将结果除以10,但从未将结果写回
pixelsum
数组,因此结果将丢失。您需要执行以下操作:

pixelsSum[x][y] = pixelsSum[x][y] / 10;
或简写:

pixelsSum[x][y] /= 10;

您将遇到的另一个问题是,Java(或任何其他语言)中的每个
字节只能保存0到255之间的值。因此,如果你有一个字节
x=255,y=1
x+y
将变成0。当你把10张图片加起来,几乎肯定会超过255张的限制。我建议将Pixelsum从
byte[][]
更改为
int[][]
,然后在进行除法后将其返回到bytes。

Pixelsum[x][y]/10无效。它应该做什么?是的,我知道,编译器说它是错的,我想把它的值除以图像的字节,得到平均值。之前我将这个值求和十次,得到所有十幅图像的和,现在我想将它除以十,得到平均值。谢谢你的回答。当然这是我的错,我一直认为这些语法错误是因为字节不能被整数除。
pixelsSum[x][y] /= 10;