Я создал функцию 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);
Работает.
Я ищу здесь помощь, ребята.