确定图像是否是Java中的灰度

时间:2013-11-19 16:02:22

标签: java awt javax.imageio

我正在使用类似的东西来检查JPEG图像的颜色空间(天真的,显然):

import java.io.*;
import java.awt.color.*;
import java.awt.image.*;
import javax.imageio.*;

class Test
{
    public static void main(String[] args) throws java.lang.Exception
    {
        File f = new File(args[0]);

        if (f.exists())
        {
            BufferedImage bi = ImageIO.read(f);
            ColorSpace cs = bi.getColorModel().getColorSpace();

            boolean isGrayscale = cs.getType() == ColorSpace.TYPE_GRAY;
            System.out.println(isGrayscale);
        }
    }
}

不幸的是,对于(直观)仅显示为灰色的图片,报告false

什么检查会做正确的事?

2 个答案:

答案 0 :(得分:2)

图片看起来像灰色,因为r=g=b但实际上它是全彩色图片,它有三个频道r g breal gray图片只有一个频道

答案 1 :(得分:2)

您可以使用此代码:

File input = new File("inputImage.jpg");

BufferedImage image = ImageIO.read(input); 

Raster ras = image.getRaster();

int elem = ras.getNumDataElements();

System.out.println("Number of Elems: " + elem);

如果elems的数量返回1,那么它是一个灰度图像。如果它返回3,那么它是一个彩色图像。