Boa Noite. Estou com dificuldades em meu projeto de tcc. Preciso analisar uma área da imagem (O usuário terá que escolher qual parte quer analisar). Esta análise irá pegar a cor em RGB de cada pixel e depois fazer uma média de R, G e B.
Qual classe eu devo utilizar? Preciso analisar uma área de cerca de 50 x 50 pixel. Estava pensando no seguinte: Quando o usuário clicar em uma parte da imagem o código deve analisar a partir do pixel “clicado” a área de 50x50 ao redor do pixel que foi “clicado”.
Desde já agradeço.
não entendo muito deste assunto, mas sei que tem um framework chamado opencv que é otimo para tratamento de imagens
Estuda OpenCV
Você pode usar OpenCV para tarefa, como sugerido pelos colegas.
Mas, para este caso, por ser simples, recomendo usar usar somente Java mesmo. Você pode carregar a imagem em um BufferedImage e ler os pixels individualmente, fazendo os cálculos que precisar. Para exibir a imagem, permitindo ao usuário clicar, pode usar Java2D e criar uma subclasse de JPanel.
Abraço.
Olá TerraSkilll eu estou querendo utilizar somente o Java mesmo pois estou desenvolvendo somente um protótipo por enquanto que será uma Aplicação Desktop e posteriormente na versão final será um Aplicativo p/ Android.
A parte de carregar e mostrar a imagem já está funcionando corretamente juntamente com os cálculos. Porém por enquanto eu estou conseguindo apenas analisar um único pixel e preciso análisar área que eu falei para ter um resultado mais coerente.
E qual a dificuldade exatamente?
Com o clique do mouse, você consegue pegar o ponto a partir do qual deseja analisar. Basta um pouco de matemática para saber onde começar e até onde ir.
Por exemplo, se você tem uma imagem de 200x200 e o usuário clica na posição 90/90, você pega a posição do clique, subtrai 25 e tem o ponto inicial (65/65). Daí soma 25 e tem a posição final (115/115). Com esses dados, você faz 2 laços for para percorrer essa matriz, analisando cada pixel.
Obviamente, você precisa adicionar algumas verificações, para não começar em posições negativas (abaixo de 0) ou acima do tamanho da imagem.
Abraço.
Ok TerraSkilll. Obrigado pela ajuda, sou iniciante em Java e estou apanhando um pouco. Eu pensei em fazer realmente o que você falou acima, só não encontrei como criar a matriz com a subtração e a soma da posição inicial. Se você puder me mostrar um exemplo fico agradecido.
Você não precisa criar essa matriz se não quiser. O BufferedImage tem um método getRGB() que te retorna um inteiro com a cor da coordenada (pixel) selecionada. Algo como:
// posicão do clique
int posicaoX = 50;
int posicaoY = 50;
// a variável imagem é um BuferredImage já devidamente carregado
for (int i = posicaoX - 25; i < posicaoX + 25; i++){
for (int j = posicaoY - 25; j < posicaoY + 25; j++){
int pixel = imagem.getRGB(i, j);
Color corDoPixel = new Color(pixel);
// faz o que quiser com pixel, analisa cor, joga fora, etc
}
}
Se você quer trabalhar mesmo com uma matriz, pode usar a outra versão do getRGB(), que retorna um array de pixels:
// obs: confira antes pra que serve cada parâmetro. Eu não testei esse código
int [][] pixels = imagem.getRGB(posicaoX - 25, posicaoY - 25; 50, 50, null, 0, 0);
for (int i = 0; i < pixels.length; i++){
for (int j = 0; j < pixels[i].length; j++){
int pixel = pixels[i][j];
Color corDoPixel = new Color(pixel);
// faz o que quiser com pixel, analisa cor, joga fora, etc
}
}
Usando a classe Color, você consegue ter os valores RGB individualmente, o que facilitará sua análise.
Abraço.