I am working on what can count the number of blue / red / yellow / ... pixels in an image. So far I have this code as a test:
public class Main { static int blackCount = 0; static int whiteCount = 0; static int redCount = 0; static int orangeCount = 0; static int yellowCount = 0; static int greenCount = 0; static int blueCount = 0; static int indigoCount = 0; static int violetCount = 0; static int otherCount = 0; static int totalCount = 0; public static void main(String[] args) { try { String path = "src/colors.jpg"; BufferedImage image = ImageIO.read(new File(path)); int w = image.getWidth(); int h = image.getHeight(); for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) { Color c = new Color(image.getRGB(x, y)); int red = c.getRed(); int green = c.getGreen(); int blue = c.getBlue(); countColor(red, green, blue); totalCount++; } } printColors(); } catch (Exception ex) { System.out.println(ex.getMessage()); } } private static void countColor(int red, int green, int blue) { if (red == 0 && green == 0 && blue == 0) blackCount++; else if (red == 255 && green == 255 && blue == 255) whiteCount++; else if (red == 255 && green == 0 && blue == 0) redCount++; else if (red == 255 && green == 127 && blue == 0) orangeCount++; else if (red == 255 && green == 255 && blue == 0) yellowCount++; else if (red == 0 && green == 255 && blue == 0) greenCount++; else if (red == 0 && green == 0 && blue == 255) blueCount++; else if (red == 111 && green == 0 && blue == 255) indigoCount++; else if (red == 143 && green == 0 && blue == 255) violetCount++; else otherCount++; } private static void printColors() { System.out.println("Black: " + blackCount); System.out.println("White: " + whiteCount); System.out.println("Red: " + redCount); System.out.println("Orange: " + orangeCount); System.out.println("Yellow: " + yellowCount); System.out.println("Green: " + greenCount); System.out.println("Blue: " + blueCount); System.out.println("Indigo: " + indigoCount); System.out.println("Violet: " + violetCount); System.out.println("Other: " + otherCount); System.out.println("Total: " + totalCount); }
But you may notice a problem ... In RGB, the color "Red" is defined as (255, 0, 0). Therefore, an image containing a lot of red can return β0β because the color used in the image is (254, 0, 0), not (255, 0, 0).
So, I really want to count not only pure red pixels, but also all the "red" pixels. I suppose there is an easier way to remove this than to write insanely long if (red = 255) if (red = 254), ... structure?
source share