DrawContours вокруг обнаруженного документа с использованием OpenCV для Android дает странную ошибку

Я новичок в OpenCv4Android. Я пытаюсь автоматически определить документ с помощью OpenCv4Android SDK. Первоначально я прошел через пейзажную камеру OpenCV. Каким-то образом мне удалось изменить ориентацию opencv JavaCameraview на портрет. Я сделал следующие изменения в классах OpenCV SDK по умолчанию для ориентации камеры OpenCV в портретной:

1) В классе CameraBridgeViewBase

 Matrix matrix = new Matrix();
 matrix.setRotate(90f);
 Bitmap bitmap = Bitmap.createBitmap(mCacheBitmap, 0, 0, mCacheBitmap.getWidth(), mCacheBitmap.getHeight(), matrix, true);

2) теперь в методе drawbitmap замените указанное растровое изображение на mCacheBitmap

3) теперь, в классе JavaCameraView

if ((getLayoutParams().width == ActionBar.LayoutParams.MATCH_PARENT) && (getLayoutParams().height == ActionBar.LayoutParams.MATCH_PARENT))
       mScale = Math.min(((float)height)/mFrameWidth, ((float)width)/mFrameHeight);
else
       mScale = 0;

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

введите описание изображения здесь введите описание изображения здесь

Как вы можете видеть на первом изображении, перед настройкой я могу обнаружить бумагу в полном зеленом цвете. А на втором изображении вы видите ошибку рисования линии (drawContours) вокруг бумаги

то, что я следую, чтобы обнаружить бумагу: GaussianBlur -> обнаружение Canny edge -> findContours -> drawContour

В методе OnCameraFrame:

     mRgba = inputFrame.rgba();
   Mat mGray = new Mat();
   Mat edged = new Mat();       
  Imgproc.cvtColor(mRgba,mGray,Imgproc.COLOR_BGR2GRAY);
  Imgproc.GaussianBlur(mRgba,mGray,new Size(5,5),0);           

-> а затем найти контуры

Imgproc.findContours(edged, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);

-> Затем я нашел самый большой контур и, наконец, DrawContours на этом

Imgproc.drawContours(mRgba, contours, maxI, new Scalar(0, 255, 0), 5);

Я не знаю, где я не прав..! Пожалуйста, помогите мне решить эту странную проблему.

@Rick M. следующее оригинальное изображение:

введите описание изображения здесь

@ ilke444, ниже приведено изображение после обнаружения края, и это именно то, что я хочу: введите описание изображения здесь

0 ответов

Другие вопросы по тегам