Uso de get () y put () para acceder a valores de píxeles en OpenCV para Java

Soy un principiante en el uso de OpenCV para JAVA. Quiero acceder a los valores de píxeles individuales de una matriz de imágenes. Desde entonces, JAVA jar para OpenCV no ofrece buenas funciones como C ++, me encontré con algunos problemas. Después de realizar muchas búsquedas, descubrí dos métodos diferentes para hacerlo, aunque no se explican correctamente (ni siquiera en la documentación). Podemos hacerlo utilizando las funciones get () y put () o convirtiendo los datos de mat en un tipo java primitivo, como matrices. Intenté ambos pero obteniendo resultados de salida diferentes! Por favor ayuda a explicar qué estoy haciendo mal. ¿Estoy usando mal o algún otro problema tonto? Todavía soy un novato, así que perdona si es una pregunta estúpida. :)

CASO 1: Usando la función 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 Array

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);

Ahora, según mi entendimiento, ambos deberían hacer lo mismo. Ambos acceden a los valores de píxeles individuales (los 3 canales) y lo hacen a la mitad. No estoy recibiendo ningún error después de correr Pero, la imagen de salida que estoy obteniendo es diferente en estos dos casos. ¿Puede alguien explicar cuál es el problema? Puede ser que no entiendo exactamente cómo funciona la función get ()? ¿Es por el casting de bytes ()? Por favor ayuda.

¡Gracias!

Respuestas a la pregunta(2)

Su respuesta a la pregunta