java - 求图像 Java 的平均值

标签 java image-processing

总的来说,我是数字图像处理和编程的初学者。我正在尝试使用光栅查找图像的平均值。说实话,这确实是在黑暗中进行的尝试,但我真的不知道该怎么做。

我的代码目前没有返回任何内容,我不确定它是否在做任何事情。我对其功能的解释是,读取图像文件,然后使用光栅根据高度和宽度坐标提取该图像的细节。我希望它基本上在控制台上输出平均值。

那么有人可以告诉我我做错了什么以及为什么我的代码没有返回图像的平均值吗?我一直在挖掘资源来尝试学习,但与图像处理相关的任何内容似乎并不适合新手,而且我发现这很困难。因此,如果有人有任何可以开始的地方,我们将不胜感激。

最终,我想计算一个图像的平均值,然后我想针对其他图像的文件目录运行该图像。这样做的目的是根据平均值查看哪些图像最相似。但我觉得我离我想要的地方还有一段距离。

这是我的代码

import java.awt.Color;
import java.awt.Graphics;
 import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.io.File;
import java.io.IOException;

 import javax.imageio.ImageIO;

 public class calculateMean {

static BufferedImage image;
static int width;
static int height;
public static void main(String[] args) throws Exception{
    try{
        File input = new File("C:\\Users\\cbirImages\\jonBon2.jpg");
        image = ImageIO.read(input);
        width = image.getWidth();
        height = image.getHeight();
}catch (Exception c){}
}

private double sum;

public double imageToCalculate(){
    int count = 0;
    for(int i=0; i<height; i++){

    for(int j=0; j<width; j++){
        count++;
        Raster raster = image.getRaster();
        double sum = 0.0;

        for (int y = 0; y < image.getHeight(); ++y){
          for (int x = 0; x < image.getWidth(); ++x){
            sum += raster.getSample(x, y, 0);
          }
        }
        return sum / (image.getWidth() * image.getHeight());

        }
}
    System.out.println("Mean Value of Image is " + sum);
    return sum;

}

}

最佳答案

您在 imageToCalculate 方法中遍历所有像素两次。这个简单的代码足以计算图像的平均值:

for (int y = 0; y < image.getHeight(); ++y)
    for (int x = 0; x < image.getWidth(); ++x)
        sum += raster.getSample(x, y, 0) ;
return sum / (image.getWidth() * image.getHeight());

但通常情况下,最好将图像作为方法的参数:

public double Average(BufferedImage image)

对于你的项目的最终目的来说,平均值是不可能给你一个好的结果的。想象一下,您有两个图像:第一个图像的所有像素为 127,第二个图像的一半像素为 0,另一个图像的像素为 255。

关于java - 求图像 Java 的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35102188/

相关文章:

java - java 数组和 Action 监听器

c++ - 访问图像像素; MatIterator_<> 和 Mat::at 运算符的比较

algorithm - 特殊 Blob 填充算法的名称

python - 如何在 OpenCV 中校正裁剪后的立体图像?

linux - 将 gstreamer 的输出重定向到 OpenCV

opencv - 红外 LED 跟踪 : Using OpenCV to track x, y, z 位置

java - java数组中最大的数字?

java - 抽象类构造函数初始化

java - if 语句的问题

java - 如何在没有 @runWith 注解的情况下初始化 zohhak 运行器