Загрузка изображения с помощью OpenCV на Android

Прошу прощения, если этот вопрос уже был рассмотрен на этом сайте, но я не могу найти прямой ответ. Я делаю приложение Android, которое использует OpenCV, чтобы сделать снимок, обработать его для обнаружения объектов и выяснить координаты этих объектов в сцене.

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

В другой заметке объекты, которые я пытаюсь обнаружить, - это бильярдные шары на столе. Какая была бы лучшая техника предварительной обработки для лучшего обнаружения шаров? Я сделал быструю проверку, используя метод canny, и кажется, что свет, отражающийся от шаров, разбивает форму круга.

Ответ 1

Чтобы загрузить изображения на Android, вы можете использовать

Bitmap bMap=BitmapFactory.decodeResource(getResources(),R.drawable.image1)

где image1 - это изображение в папке Ресурсы вашего проекта Android. Затем преобразуйте Bitmap в байты или Mat и обработайте в С++ (OpenCV) или Java с помощью методов matToBitmap или MatToBitmap в android-opencv.

Если вам удобно работать с использованием типа данных Mat, вы можете использовать (вам нужно проект android-opencv)

Mat m = Highgui.imread("/media/path_to_image");

Вы можете использовать blobs, hough круги для обнаружения бильярдных шаров. На это нет определенного способа ответить. Вы можете попробовать использовать нормализованные цветовые пространства RGB или Lab, чтобы поиграть (чтобы удалить отражение бильярдных шаров), чтобы увидеть, обнаруживаете ли вы бильярдные шары (бегущие круги, круги).

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

Ответ 3

Я знаю это слишком поздно, но кто-то может это использовать.

Highgui был удален из opencv для android.

Вместо этого вы можете использовать Imgcodes.

Mat BGRMat = Imgcodecs.imread(getResources().getDrawable(R.drawable.img).toString());