Optical character recognition in java

Bom dia, preciso de uma ajuda,

Preciso pegar a tonalidade das questões utilizando o Java Swing, alguém tem uma ideia de como fazer, gostaria do tipo vc segurar o mouse ele pintar de azul e depois definir a quantidade de linhas e colunas daquela seleção, e depois com os círculos adquirir a tonalidade de cada resposta, para saber a questão assinalada

Isso não é trivial de se implementar.
Dê uma olhada nos métodos das classes BufferedImage e Graphics2D.
De repente utilizar a API OpenCV para reconhecimento de padrões…

Tem alguma forma de pegar a tonalidade do quadrado? em vez da pixel

Supondo que sua imagem é um objeto do tipo BufferedImage e que você tem um objeto do tipo Rectangle que representa o quadro do qual você quer calcular a tonalidade.

Você pode obter um objeto BufferedImage correspondente à esse quadro da seguinte forma:

BufferedImage selecao = imagem.getSubimage(quadro.x, quadro.y, quadro.width, quadro.height);

Agora que você tem um objeto correspondente à área da qual quer computar a tonalidade, você pode calcular dessa forma: Color tonalidade = getTonalidade(selecao);

Abaixo está a implementação do método getTonalidade, se você observar o código, esse método obtém os pixels do quadro selecionado através do método getPixels e em seguida calcula a tonalidade, que nada mais é do que a média dos pixels do quadro selecionado:

Método getTonalidade:

private Color getTonalidade(BufferedImage imagem) {
    int[] pixels = getPixels(imagem);
    int r = 0;
    int g = 0;
    int b = 0;
    int count = pixels.length;
    for (int i = 0; i < count; i++) {
        Color cor = new Color(pixels[i]);
        r += cor.getRed();
        g += cor.getGreen();
        b += cor.getBlue();
    }
    r /= count;
    g /= count;
    b /= count;
    return new Color(r, g, b);
}

Método getPixels:

private int[] getPixels(BufferedImage imagem) {
    int width = imagem.getWidth();
    int height = imagem.getHeight();
    int size = width * height;
    PixelGrabber pixelGrabber = new PixelGrabber(imagem, 0, 0, width, height, new int[size], 0, width);
    pixelGrabber.startGrabbing();
    return (int[]) pixelGrabber.getPixels();
}
1 curtida