Intereting Posts
Android Webview – веб-страница должна соответствовать экрану устройства Как удалить кеш других приложений из нашего приложения для Android? Использование JavaCV и Realm вместе вызывает «java.lang.UnsatisfiedLinkError» Существуют ли общие конфигурации AVD где-нибудь, которые можно загрузить / просмотреть? Android анимация, чтобы повернуть вид и заморозить его после вращения Панель инструментов Android Добавление элементов меню для разных фрагментов Преобразовать float в CharSequence в android? Программно получить уровень API Android на устройстве? Android – Какой из них использовать Active Android или Realm Ошибка r.string "не может быть разрешена или не является полем" Можно ли изменить префикс имени пакета по умолчанию для новых приложений для Android (издание сообщества Intellij-IDEA) Android, намерение не работает? Getheight () px или dpi? Как визуализировать текст в C (android)? Как я могу запустить Onclick событие программно в android?

Путаница между типами данных OpenCv4Android и C ++

Я пытаюсь написать некоторые приложения, используя OpenCv4Android для Android-устройств. Раньше я использовал собственные коды Android NDK и C ++. Но эта техника была не очень ясной. Поэтому я переключился на новейший Java API, поставляемый вместе с версией OpenCv 2.4.4.

Я смог написать простые программы и запустить образцы. Но, хотя я пытался написать некоторые коды для передовых проблем, таких как: оценка модели POSE, процедуры калибровки камеры и т. Д., Я столкнулся с этой очень странной путаницей. Некоторые типы данных, имена которых очень интуитивно понятны в C ++ API, действительно не соответствуют их Java-аналогу. Следовательно, я столкнулся с ужасной трудностью для переноса моей функциональности с C ++ на Java. Я сталкиваюсь с полной путаницей в этих функциях

  • Point2f (в C ++) – MatOfPoint2f (в Java)
  • Point3f (в C ++) – MatOfPoint3f (в Java)
  • Point2 (на Java)
  • Point3 (на Java)

Пожалуйста, помогите мне понять термины, используемые в OpenCv Java и его аналогию с C ++.

Также, пожалуйста, предложите мне некоторую ссылку, где дано четкое и четкое описание этих условий (я попытался просмотреть предоставленную вами помощь, но мне это не помогло, так как это было похоже на C ++ и Java).

Solutions Collecting From Web of "Путаница между типами данных OpenCv4Android и C ++"

Цитирование Андрея Павленко:

Были введены классы MatOfXxx (например, MatOfPoint), чтобы избежать избыточного копирования промежуточных данных между Java и собственной памятью. Например, вы можете получить большой набор очков в результате одной функции OpenCV, а затем передать ее другому.

В C ++ для этого используется std :: vector. Но использование ArrayList в Java вызвало копирование всех данных точек с родного уровня OpenCV на Java при возврате этих точек и их копировании при вызове следующей функции OpenCV с их использованием. Таким образом, для повышения эффективности мы переключились на использование класса MatOfPoint в таких случаях, который является своего рода Mat из 1n или n1 измерений, который удерживает точку в каждом элементе (т.е. типа CV_32SC2 или CV_64FC2).

Как вы, возможно, знаете, Mat сохраняет все данные на собственном уровне, поэтому такие объекты могут передаваться между вызовами OpenCV без копирования данных. Но если в вашем Java-коде в какой-то момент вам нужен прямой доступ к данным фактических точек, существуют методы toArray () и fromArray для явного переноса данных в / из Java.

Например, для создания MatOfPoint2f, содержащего точки, соответствующие тем из существующего MatOfKeyPoint, вам нужно:

  • Загрузить KeyPoints в Java через MatOfKeyPoint.toArray ()
  • Итерации через KeyPoint [] и создания соответствующей точки [] (все cv :: Point, cv :: Point2f и cv :: Point2d представлены как org.opencv.core.Point в Java)
  • Используйте MatOfPoint2f.fromArray () или c-tor MatOfPoint2f (Point … pa), чтобы поместить свои очки в исходный уровень

Что касается соответствия C ++ vs Java:

vector<Point> : MatOfPoint vector<Point2f> : MatOfPoint2f vector<Point3i> : MatOfPoint3 vector<Point3f> : MatOfPoint3f vector<KeyPoint> : MatOfKeyPoint vector<DMatch> : MatOfDMatch vector<Rect> : MatOfRect vector<uchar> : MatOfByte vector<char> : MatOfByte vector<int> : MatOfInt vector<float> : MatOfFloat vector<double> : MatOfDouble vector<Vec4i> : MatOfInt4 vector<Vec4f> : MatOfFloat4