Существует несколько способов использования OpenCV на Xamarin.Android:
1 - Использование привязки OpenCV4Android: OpenCV4Android - это оболочка OpenCV (C ++) для Android (Java) используя JNI.Благодаря привязке у нас есть интерфейс между Java и C # (дополнительная информация в https://docs.microsoft.com/en-us/xamarin/android/platform/binding-java-library/).
Это было реализовано в https://github.com/jeremy-ellis-tech/Xamarin.Android.OpenCV, где использовался OpenCV 3.1.0.Вы можете следовать инструкциям по установке и «Уменьшению размера .dll», чтобы сгенерировать dll и ссылаться на нее, или вы можете вставить в Visual Studio Solution проект Visual Studio из папки «/src/OpenCV.Binding» и добавить ссылку изваш проект в этот новый проект.
Если вы хотите использовать более новую версию, вы можете загрузить более новую версию OpenCV4Android (файл с именем opencv-version-android-sdk.zip в OpenCV SourceForge, например: OpenCV4Android4.1.0 по ссылке https://sourceforge.net/projects/opencvlibrary/files/4.1.0/) и замените содержимое папки "/src/OpenCV.Binding/Jars" в предыдущем проекте на содержимое папок "/ sdk / native / libs" и "/ sdk / native /3rdparty / libs "извлеченного OpenCV4Android.
Есть также NuGet форка этого проекта: https://www.nuget.org/packages/Xamarin.OpenCV.Droid, который может упростить установку и использование, но я не использовал это, поэтому яне могу сказать, работает ли он.
Поскольку этот метод является связыванием OpenCV4Android, а не чистым OpenCV, вы будете использовать документацию OpenCV4Android (https://opencv.org/android/). ЭтоТакже стоит сказать, что таким образом, у нас есть 3 уровня языков программирования (C # - Java - C ++), поэтому мы имеем потери производительности при вызове метода (JNI - это бремя).Поэтому предлагается использовать как можно меньше вызовов.
2 - Используя оболочку OpenCV C ++: таким образом мы будем использовать общие библиотеки C ++ (.so)и вызовите его методы из C # (https://docs.microsoft.com/en-us/xamarin/android/platform/native-libraries).. Чтобы сделать это, нам нужно написать PInvoke методов OpenCV, которых много, что означает много времени. Поэтому мы будем использовать то, что кто-то уже сделал.
У нас есть OpenCvSharp, который является оберткой OpenCV для .NET и, очевидно, работает хорошо. Проблема: она не совместима с ARM, поэтому она не будет работать на смартфонах. Однако хорошая душа адаптировала его для работы наУстройства ARM: https://github.com/Kawaian/OpenCvSharp.
Как использовать это быстро: вы вставляете проект папки "/ src / OpenCvSharp" в свое решение и ссылаетесь на него. Вы копируете содержимое "/ src / OpenCvSharp.Android / Native »в папку« lib »или« libs »вашего проекта. Затем вы настраиваете« .so »файлы на« Always copy »для выходного каталога и настраиваете их действие сборки на« AndroidNativeLibrary »(если ваш проектприложение) или «Встроенный нативныйБиблиотека "(если ваш проект является библиотекой Android).
Другой способ - установить NuGet (https://www.nuget.org/packages/Kawaian.OpenCVSharp/),, что немного облегчает задачу, но также потребуется скопировать".поэтому "файлы в" lib "или" libs "и настройте их.
Эта обертка использует OpenCV 3.2.0.Я изучаю способ обновления версии OpenCV в этом проекте, но пока он работает.
Большим преимуществом этого способа является производительность (~ 30% улучшений в моем приложении при сравнении реализаций двух способов), но единственным недостатком является отсутствие уже созданных методов преобразования Android.Bitmap - OpenCV.Mat.