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

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

**Случай 1: Использование функции get ()**

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

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

Спасибо!

тового изображения во втором случае на * CV\_64FC3 *, чтобы я мог использовать double [] вместо byte [], и это решило проблему.

К вашему сведению, я также провел некоторые измерения времени, и использование второго метода намного быстрее, чем первого.



Нашел простое и рабочее решение после долгих поисков

`<strong>Замечания:</strong> Важным моментом, который нигде не упоминался в Интернете, является то, что метод<code>put</code> не записывает пиксели на<code>Input.jpg</code>, Это просто обновляет значения матрицы<code>img</code>, Поэтому приведенный выше код ничего не меняет во входном изображении. Для получения видимого вывода, матрица<code>img</code> должен быть записан в файл, т.е.<code>Output.jpg</code> в этом случае. Кроме того, используя<code>img.get(i, j)</code> Похоже, что это лучший способ обработки матричных элементов, а не использование принятого решения, описанного выше, поскольку это помогает лучше визуализировать матрицу изображения и работать с ней и не требует большого выделения непрерывной памяти.`