Usando get () e put () para acessar valores de pixel no OpenCV para Java

Eu sou um iniciante no uso de OpenCV para JAVA. Eu quero acessar valores de pixel individuais de uma matriz de imagem. Desde que, JAVA jar para OpenCV não oferece boas funções como C + +, me deparei com alguns problemas. Após muita pesquisa, descobri dois métodos diferentes para fazer isso, embora não sejam explicados corretamente (nem mesmo na documentação). Podemos fazer isso usando as funções get () e put () ou convertendo os dados do campo em um tipo java primitivo, como arrays. Eu tentei os dois, mas obtive resultados de saída diferentes! Por favor, ajude a explicar o que estou fazendo errado. Estou usando-os errado ou algum outro problema bobo. Eu ainda sou um novato então por favor, perdoe se é uma pergunta estúpida. :)

CASO 1: Usando a função get ()

Mat A = Highgui.imread(image_addr); \\"image_addr" is the address of the image
Mat C = A.clone();
Size sizeA = A.size();
for (int i = 0; i < sizeA.height; i++)
    for (int j = 0; j < sizeA.width; j++) {
        double[] data = A.get(i, j);
        data[0] = data[0] / 2;
        data[1] = data[1] / 2;
        data[2] = data[2] / 2;
        C.put(i, j, data);
    }

CASO 2: Usando Matriz

Mat A = Highgui.imread(image_addr); \\"image_addr" is the address of the image
Mat C = A.clone();
int size = (int) (A.total() * A.channels());
byte[] temp = new byte[size];
A.get(0, 0, temp);
for (int i = 0; i < size; i++)
   temp[i] = (byte) (temp[i] / 2);
C.put(0, 0, temp);

Agora, de acordo com o meu entendimento, ambos devem fazer a mesma coisa. Ambos acessam os valores individuais de pixel (todos os 3 canais) e fazem a metade. Eu não estou recebendo nenhum erro depois de correr. Mas a imagem de saída que estou obtendo é diferente nesses dois casos. Alguém pode por favor explicar qual é o problema? Pode ser que eu não entendo exatamente como funciona a função get ()? É por causa do byte () casting? Por favor ajude.

Obrigado!

questionAnswers(2)

yourAnswerToTheQuestion