3

我有一个整数数组'int像素[][]'的数组

我想找到所有这些的总和,这样我就可以找到平均像素值

这将用于我可以将像素的平均值设置为 pbm 图像的阈值

如果该值高于阈值,我将导出一个白色像素,如果低于阈值,我将导出一个黑色像素(只是为了提供一些上下文)

我假设下面的代码根本不正确,因为它的输出是 6.0 但我认为它是这样的

   double threshold = 0;
   for(int i = 0; i < pixels.length; i++)
   {
       threshold += (double)pixels[i][i];
   }
   System.out.print(threshold);
4

5 回答 5

5

你想迭代数组中的所有数字,你可以试试这个:

           double threshold = 0;
           for(int i = 0; i < pixels.length; i++)
           {
               for(int j=0;j<pixels[i].length;j++){
                   threshold += (double)pixels[i][j];
               }
           }
           System.out.print(threshold);
于 2013-02-20T11:35:31.297 回答
0

你需要在for这里使用双精度。像这样的东西: -

for(int i = 0; i < pixels.length; i++){
        for(int i = 0; i < pixels[i].length; i++){
               threshold += (double)pixels[i][j];
        }
}
于 2013-02-20T11:35:34.433 回答
0

您需要遍历数组中的每一行和每一列,因此需要 2 个 for 循环。您当前所做的仅涵盖以下内容:(0,0), (1,1), (2,2), ....

这将起作用:(假设一个非锯齿状数组,至少对于阈值计算)

long sum = 0;
for (int i = 0; i < pixels.length; i++)
for (int j = 0; j < pixels[i].length; j++)
{
   sum += pixels[i][j];
}
double threshold = (double)sum / (pixels.length * pixels[0].length);
System.out.print(threshold);

或者更简单地说:(假设一个非锯齿状数组,至少对于阈值计算)

long sum = 0;
for (int[] i: pixels)
for (int j: i)
{
   sum += j;
}
double threshold = (double)sum / (pixels.length * pixels[0].length);
System.out.print(threshold);
于 2013-02-20T11:36:24.107 回答
0

暗示

你有一个二维数组,所以要添加每个元素,你需要遍历每一行的每一列。对于这 2 个 for 循环可能会有一些用处。

遍历每个值并添加它们

退出循环

将总和除以元素数以获得平均值(您可能需要考虑在此处键入强制转换)

于 2013-02-20T11:37:16.840 回答
0

计算整数总和时不需要双精度数,这是一种浪费,使用长整数会更快

    long sum = 0;
    int n = 0;
    for (int[] a : pixels) {
        for (int e : a) {
            sum += e;
            n++;
        }
    }
    double avg = ((double) sum) / n;
于 2013-02-20T11:39:24.773 回答