Как применить алгоритм сопоставления Opencv к двум различным объектам Mat? - PullRequest
0 голосов
/ 08 апреля 2019

Я создал функцию JNI, разрабатывая алгоритм OpenCV ORB для сопоставления изображений.

Я попробовал функцию на двух изображениях из папки Android Assets, и она работает, как и ожидалось.

Тогда мне нужно было, чтобы оно было общим для изображений в реальном времени. Поэтому я дал приложению контрольное изображение, и мне нужно сопоставить его с изображением в реальном времени.

Странная часть - когда я передаю ссылку Mat сопоставление с самим собой, сопоставление работает, и когда я передаю Mat в реальном времени для сопоставления с самим собой, сопоставление также работает. Но когда я передаю эталонный Mat и Mat в реальном времени, происходит сбой приложения без каких-либо ошибок, я пытался записать размер и число каналов Mat s, и это правильно, я также пытался сохранить Mat s устройство внутренней памяти и они правильные.

Я не знаю, что искать и почему функция работает только для одного Mat.

Вот пример кода

Mat miniature = new Mat(rotated, new Rect(rectList.get(0).tl(), rectList.get(0).br()));


Imgproc.cvtColor(miniature, miniature, Imgproc.COLOR_BGR2BGRA);
miniature.convertTo(miniature, 0);

(referenceObjects.get(0)).convertTo(referenceObjects.get(0), 0);
Log.d("matching result", "" + detectFeatures(referenceObjects.get(0).getNativeObjAddr(), miniature.getNativeObjAddr()) * 100);

Здесь у меня крушение.

Если я попробую это

Log.d("matching result", "" + detectFeatures(miniature.getNativeObjAddr(), miniature.getNativeObjAddr()) * 100);

ИЛИ это

Log.d("matching result", "" + detectFeatures(referenceObjects.get(0).getNativeObjAddr(), referenceObjects.get(0).getNativeObjAddr()) * 100);

Работает.

Я ищу здесь помощь, ребята.

...