Подсчет количества цветов изображения
У меня есть три разных изображения (jpeg или bmp). Я пытаюсь предсказать сложность каждого изображения на основе количества цветов каждого. Как я могу сделать это возможным с Java? Спасибо.
обновление: Эти коды не работают .. на выходе показывает 1312 цветов даже это только простой красный и белый
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.ArrayList;
import javax.imageio.ImageIO;
public class clutters {
public static void main(String[] args) throws IOException {
ArrayList<Color> colors = new ArrayList<Color>();
BufferedImage image = ImageIO.read(new File("1L.jpg"));
int w = image.getWidth();
int h = image.getHeight();
for(int y = 0; y < h; y++) {
for(int x = 0; x < w; x++) {
int pixel = image.getRGB(x, y);
int red = (pixel & 0x00ff0000) >> 16;
int green = (pixel & 0x0000ff00) >> 8;
int blue = pixel & 0x000000ff;
Color color = new Color(red,green,blue);
//add the first color on array
if(colors.size()==0)
colors.add(color);
//check for redudancy
else {
if(!(colors.contains(color)))
colors.add(color);
}
}
}
system.out.printly("There are "+colors.size()+"colors");
}
}
3 ответов
код в основном правильный, тогда как слишком сложный. Вы можете просто использовать Set
и добавить int
значение для него, так как существующие значения игнорируются. Вам также не нужно вычислять значения RGB для каждого цвета, как int
значением, возвращенным getRGB
уникально само по себе:
Set<Integer> colors = new HashSet<Integer>();
BufferedImage image = ImageIO.read(new File("test.png"));
int w = image.getWidth();
int h = image.getHeight();
for(int y = 0; y < h; y++) {
for(int x = 0; x < w; x++) {
int pixel = image.getRGB(x, y);
colors.add(pixel);
}
}
System.out.println("There are "+colors.size()+" colors");
"странное" количество цветов, которые вы получаете, связано с сжатием изображения (JPEG в вашем примере) и, возможно, другими причинами, такими как сглаживание вашего программного обеспечения для редактирования изображений. Хотя вы рисуете только красным и белым, полученное изображение может содержать много цветов между этими двумя значениями по краям.
это означает, что код будет возвращать реальные количество цветов, используемых в конкретном образе. Вы также можете посмотреть на различные форматы файлов изображений и алгоритмы сжатия без потерь и потерь.
имеет метод getRGB, который может быть полезен. Но как вы можете видеть в этом классе. Подсчет цветов-это не тривиальные вещи, так как есть множество цветовых кодировок, а также Альфа-каналы.