我是数字图像处理和编程的初学者。我试图使用栅格找到图像的平均值。说实话,这是在黑暗中真正的刺,但我真的迷失在这里做什么。
我的代码目前没有返回任何内容,我不确定它是否正在做任何事情。我对其所做的解释是,读取图像文件,然后使用栅格根据高度和宽度cooridinates提取该图像的细节。我希望它基本上在控制台上输出均值。
那么有人能告诉我我做错了什么以及为什么我的代码没有返回图像的平均值?我一直在挖掘资源来尝试和学习,但任何与图像处理相关的东西似乎都不适合新手,我发现它很难。因此,如果任何人都有任何好的开始,将不胜感激。
最终,我想计算一个图像的平均值,然后我想对其他图像的文件目录运行该图像。这一点是基于平均值来查看哪些图像最相似。但我觉得我离我想去的地方有点远。
这是我的代码
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;
}
}
答案 0 :(得分:1)
您在方法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。