2014-11-10 1 views
0

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

Это действительно проблема убийства, хотя она может быть простой для экспертов.

Я работаю на OpenCV Хаара Cascade классификаторов. (Например: Face Detection, обнаружение глаз пара)

Я просто взял обнаружения лица образца код из «OpenCV-2.4.9 -android-sdk "- образцы.

Этот пример кода устанавливается в ландшафтном режиме и все работает мелкий.

Однако, я хочу сделать классификаторы работать в портрет режиме. Я знаю, что класс классификаторы были не работали в портретном режиме.

Как OpenCV использует «CameraBridgeViewBase», идентификатор on't есть все элементы управление играть с разрешением камеры и отображением изображений обратно на экране. (Предварительный просмотр)

Теперь, момент я установить ориентацию экрана, как «андроида: screenOrientation =» портрет», изображения вращают 90deg часы мудрая

Что я пробовал:.

Чтобы просмотреть изображение портрета без вращения: я изменил «deliverAndDrawFrame» в «CameraBridgeViewBase», добавив

  Matrix matrix = new Matrix(); 
      matrix.preTranslate((canvas.getWidth() - mCacheBitmap.getWidth())/2,(canvas.getHeight() - mCacheBitmap.getHeight())/2); 

      if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) 
       matrix.postRotate(90f,(canvas.getWidth())/2,(canvas.getHeight())/2); 
      canvas.drawBitmap(mCacheBitmap, matrix, null); 

Чтобы сделать классификатор работу с портретным режимом: я играл со всеми видами перестановок и комбинацией транспонируют и flip, чтобы повернуть изображение серой шкалы, которое я передаю, чтобы обнаружить multultale в "o nCameraFrame».

В чем моя проблема?

  1. Я не в состоянии получить изображения с родным разрешением, которое выше, чем то, что я получаю в «onCameraFrame». Как получить оригинальное или фактическое или собственное качество изображений до емкости датчиков камеры?

  2. Как я уже приложил много усилий на создание классификаторов работы с портретным режимом без какой-либо удачи, любые предложения/кодов выборок/ссылки, которые работают, помог бы мне много.

+0

Может ли кто-нибудь дать мне руку? – 2vision2

+0

Разработчики не хотят нам помогать, и существует огромное количество противоречивых идей о том, как это решить. – Nicolas

ответ

0

Я нашел решение:

Matrix matrix = new Matrix(); 
    matrix.preTranslate((canvas.getWidth() - mCacheBitmap.getWidth())/2,(canvas.getHeight() - mCacheBitmap.getHeight())/2); 
    matrix.postRotate(90f,(canvas.getWidth())/2,(canvas.getHeight())/2); 
    float scale = (float) canvas.getWidth()/(float) mCacheBitmap.getHeight(); 
    matrix.postScale(scale, scale, canvas.getWidth()/2 , canvas.getHeight()/2); 
    canvas.drawBitmap(mCacheBitmap, matrix, new Paint()); 

Это обеспечивает портретный режим с ПРАВИЛЬНЫМ масштабом: D попробовать его, пожалуйста. Я использую OpenCV 3.4.