Загрузка изображения с помощью OpenCV в Android - PullRequest
12 голосов
/ 15 ноября 2011

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

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

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

Ответы [ 3 ]

17 голосов
/ 17 ноября 2011

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

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

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

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

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

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

Сценарий в реальном времени потребует от вас использования методов машинного обучения для обнаружения бильярдных шаров с использованием определенных векторов функций, а затем для обучения и тестирования.

5 голосов
/ 03 октября 2016

Это работает для меня (получил ответ отсюда: Как получить Мата с рисованным вводом в Android, используя OpenCV )

Mat img = null;
try {
    img = Utils.loadResource(this, R.drawable.image_id, CvType.CV_8UC4);
} catch (IOException e) {
    e.printStackTrace();
}
2 голосов
/ 30 марта 2016

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

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

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

Mat BGRMat = Imgcodecs.imread(getResources().getDrawable(R.drawable.img).toString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...