Я работаю над тем, что может подсчитать количество синих / красных / желтых / ... пикселей на изображении.Пока у меня есть этот код в качестве теста:
public class Main {
/*
Black: 0,0,0
White: 255, 255, 255
Red: 255, 0, 0
Orange: 255, 127, 0
Yellow: 255, 255, 0
Green: 0, 255, 0
Blue: 0, 0, 255
Indigo: 111, 0, 255
Violet: 143, 0, 255
*/
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);
}
Но вы можете заметить проблему ... В RGB цвет "Красный" определяется как (255, 0, 0).Поэтому изображение, содержащее много красного, может возвращать «0», потому что цвет, используемый на изображении, равен (254, 0, 0), а не (255, 0, 0).
Так что я действительно хочусчитайте не только чисто красные пиксели, но и все «красноватые» пиксели.Я предполагаю, что есть более простой способ справиться с этим, чем написать безумную длинную if (red = 255), if (red = 254), ... структур?