drawContours em torno do documento detectado usando o opencv para android dá um bug estranho
Eu sou novo no OpenCv4Android. Estou tentando detectar automaticamente o documento usando o OpenCv4Android sdk. Inicialmente, eu passei pela questão da câmera paisagem opencv. De alguma forma, eu consegui mudar a orientação do opencv JavaCameraview para portrait. Fiz as seguintes alterações nas classes padrão do opencv sdk para orientar a câmera opencv no retrato:
1) EmCameraBridgeViewBase classe
Matrix matrix = new Matrix();
matrix.setRotate(90f);
Bitmap bitmap = Bitmap.createBitmap(mCacheBitmap, 0, 0, mCacheBitmap.getWidth(), mCacheBitmap.getHeight(), matrix, true);
2) agora no método drawbitmap substitua acimabitmap commCacheBitmap
3) agora, emJavaCameraView classe
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;
Após as alterações acima, sou capaz de orientar a câmera no modo retrato. Mas, tendo problema estranho na detecção de documento. Veja as imagens abaixo
Como você pode ver na primeira imagem, antes da personalização eu posso detectar papel na cor verde total. E na segunda imagem você pode ver o erro da linha de desenho (drawContours) ao redor do papel
o que sigo para detectar papel é:GaussianBlur -> Detecção de bordas Canny -> findContours -> drawContour
No método 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);
-> e depois encontrar contornos
Imgproc.findContours(edged, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
-> Então eu encontrei o maior contorno e finalmente o drawContours naquele
Imgproc.drawContours(mRgba, contours, maxI, new Scalar(0, 255, 0), 5);
Eu não sei onde estou errado ..! Por favor, ajude-me a resolver esse problema estranho.
@Rick M. a seguir é a imagem original:
@ ilke444, a seguir está a imagem após a detecção de borda, que é perfeitamente o que eu quero: