计算给定图像中的红色像素

问题描述:

我是Java新手,想要计算给定图像中的红色像素。到目前为止我有下面的代码,但不知道要添加什么条件来检查像素是否是红色的。到目前为止,我有以下代码。提前致谢。计算给定图像中的红色像素

public static int countRedPixels(Picture v){ 

    BufferedImage image = (v.getBufferedImage()); 
    int width = image.getWidth(); 
    int height = image.getHeight(); 

    int redCount = 0; 
    int pixelCount = 0; 

    for (int x = 0; x < width; x++) { 
     for (int y = 0; y < height ; y++) { 

      int rgb = image.getRGB(x, y); 

      //get rgbs 
      //int alpha = (rgb >>> 24) & 0xFF; 
      int red = (rgb >>> 16) & 0xFF; 
      int green = (rgb >>> 8) & 0xFF; 
      int blue = (rgb >>> 0) & 0xFF; 

      if (red == 255 && green == 0 && blue == 0 || image.getRGB(x, y) == 0xFFFF0000) { 
       redCount++; 
      } 

      pixelCount++; 
     } 
    } 

    System.out.println("Red Pixel Count:" + redCount); 
    System.out.println("Pixel Count:" + pixelCount); 
    return redCount; 
} 

enter image description here

+1

我想这取决于你的*红*的定义?会不会是rgb(255,0,0)? – domsson

+0

是的,它会是(255,0,0)。 –

+2

那么,那么...'if(red == 255 && green == 0 && blue == 0){++ redCount; }'?甚至'如果(rgb == 0xFFFF0000)...' – domsson

不知道如果我失去了一些东西,或者你真的不只见树木不见森林。无论如何,评论转身回答:

鉴于手段(255,0,0),你可以这样做:

if (image.getRGB(x, y) == 0xFFFF0000) { 
    ++redCount; 
} 

或者,如果你不关心阿尔法:

if (red == 255 && green == 0 && blue == 0) { 
    ++redCount; 
} 
+0

我的计数在函数结束时为0。这就是为什么我在上面粘贴的代码中做错了任何错误的原因。 –

+0

这两种方法都会以“0”结尾吗? – domsson

+0

是的。我只是改变了与PNG图像,它的工作。奇怪它不适用于jpegs。 –