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, ниже приведено изображение после обнаружения края, и это именно то, что я хочу: