Использование get () и put () для доступа к значениям пикселей в OpenCV для Java

Я новичок в использовании OpenCV для JAVA. Я хочу получить доступ к отдельным значениям пикселей матрицы изображения. С тех пор JAVA JAR для OpenCV не делаетНе предлагая хороших функций, таких как C ++, я столкнулся с некоторыми проблемами. После долгих поисков я нашел два разных способа сделать это, хотя они не объяснены должным образом (даже в документации). Мы можем сделать это либо используя функции get () и put (), либо преобразовав данные mat в примитивный тип java, такой как массивы. Я пробовал оба, но получал разные результаты! Пожалуйста, помогите объяснить, что я делаю не так. Я использую их неправильно или какую-то другую глупую проблему. Я все еще новичок, поэтому, пожалуйста, прости, если это глупый вопрос. :)

Случай 1: Использование функции 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);
    }

Случай 2: Использование массива

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

Теперь, насколько я понимаю, они оба должны делать то же самое. Они оба получают доступ к значениям отдельных пикселей (все 3 канала) и делают его наполовину. Я не получаю ошибки после запуска. Но полученное изображение в этих двух случаях отличается. Может кто-нибудь объяснить, в чем проблема? Может быть я неt точно понять, как работает функция get ()? Это из-за приведения типа byte ()? Пожалуйста помоги.

Спасибо!

Ответы на вопрос(2)

Ваш ответ на вопрос