Ola Pessoal!
Estou tentando desenvolver um programa em java que leia uma imagem e diga qual a cor daquela imagem, por exemplo após ler a imagem diz se a imagem é azul, vermelho, verde etc. Porém estou aprendendo programação Java agora e nunca trabalhei com imagens antes, vocês poderiam me ajudar me dizendo como trabalhar com imagens e/ou alguma vídeo aula, livro, site que ensine a trabalhar com imagens no Java.
Desde já Agradeço
Você pode carregar a imagem num BufferedImage usandno ImageIO.read(), e pegar a cor dos pixels com o método getRGB(), passando a posição do pixel que quer analisar.
Referências:
Abraço.
Este código exige a cor RGB mais comum de uma imagem. O que fiz foi basicamente registrar todos os pixels da imagem e ver qual que é o pixel mais comum.
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
import javax.imageio.ImageIO;
class CorCustomizada {
private Color color;
public CorCustomizada(Color color) {
this.color = color;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof CorCustomizada)) {
return false;
}
CorCustomizada outraCor = (CorCustomizada) obj;
return this.color.getRed() == outraCor.color.getRed() &&
this.color.getGreen() == outraCor.color.getGreen() &&
this.color.getBlue() == outraCor.color.getBlue();
}
@Override
public int hashCode() {
return Objects.hash(color.getRed(), color.getGreen(), color.getBlue());
}
@Override
public String toString() {
return "(" + color.getRed() + "," + color.getGreen() + "," + color.getBlue() + ")";
}
}
public class Teste {
public static void main(String args[]) throws Exception {
BufferedImage imagem = ImageIO.read(new File("pasta/pasta2/minha_imagem.png"));
List<CorCustomizada> todosPixelsDaImagem = new ArrayList<>();
for (int i = 0; i < imagem.getHeight(); i++) {
for (int j = 0; j < imagem.getWidth(); j++) {
Color corPixel = new Color(imagem.getRGB(i, j), true);
todosPixelsDaImagem.add(new CorCustomizada(corPixel));
}
}
CorCustomizada corRgbMaisComum = todosPixelsDaImagem.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting())).entrySet().stream()
.max(Comparator.comparing(x -> x.getValue()))
.get()
.getKey();
System.out.println(corRgbMaisComum);
}
}