Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定图像在Java中是否为灰度_Java_Awt_Javax.imageio - Fatal编程技术网

确定图像在Java中是否为灰度

确定图像在Java中是否为灰度,java,awt,javax.imageio,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]);

我正在使用类似的方法(显然是天真的)检查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


什么检查会做正确的事情?

图像看起来像灰色的,因为
r=g=b
但实际上它是一个全彩图像,它有三个通道
r-g-b
,而
真正的灰色图像只有一个通道图像看起来像灰色的,因为
r=g=b
但实际上它是一个全彩图像,它有三个通道
RGB
,而
真实灰度图像只有一个通道

您可以使用以下代码:

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);
如果元素数返回1,则为灰度图像。如果返回3,则为彩色图像。

您可以使用以下代码:

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);

如果元素数返回1,则为灰度图像。如果返回3,则为彩色图像。

是的,我已经计算出来了。;)问题是,是否有一种更智能的检查方法可以做正确的事情?最简单的方法是在有三个的情况下检查RGBchannels@Tomalak使用来自的信息检查每个像素,并评估每个像素的R、G和B是否都相等。是的,我已经计算出来了。;)问题是,是否有一种更智能的检查方法可以做正确的事情?最简单的方法是在有三个的情况下检查RGBchannels@Tomalak使用来自的信息检查每个像素,并评估每个像素的R、G和B是否都相等。这会识别以全色保存的图像吗,但是只包含灰色像素?不。但是,这将作为过滤掉只有一个通道的图像的第一步。对于下一阶段,您只需将像素复制到3D阵列中并检查元素。在它也经历了这个阶段之后,它就成为了一种确定它的简单方法。if(numofChannels==3){int[][]Imagepixelinfo=newint[imWidth][imHeight][numofChannels];//带有像素信息的3d数组imageArray(image);//设置数组颜色orbw=typeChecker(Imagepixelinfo);//检查各个元素后返回true或false来判断图像是黑白还是彩色}很有意义,谢谢。这个问题所针对的情况不再适用于我,但我还是会切换已接受的答案,因为您的帖子包含可用的代码。谢谢:)。我很欣赏这个手势。这会识别全彩保存但只包含灰色像素的图像吗?不会。但是,这将作为过滤图像的第一步,因为图像只有一个通道。对于下一阶段,您只需将像素复制到3D阵列中并检查元素。在它也经历了这个阶段之后,它就成为了一种确定它的简单方法。if(numofChannels==3){int[][]Imagepixelinfo=newint[imWidth][imHeight][numofChannels];//带有像素信息的3d数组imageArray(image);//设置数组颜色orbw=typeChecker(Imagepixelinfo);//检查各个元素后返回true或false来判断图像是黑白还是彩色}很有意义,谢谢。这个问题所针对的情况不再适用于我,但我还是会切换已接受的答案,因为您的帖子包含可用的代码。谢谢:)。我很欣赏这个手势。