我是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方法中将 bitmap 替换为 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;

经过上述更改后,我可以将相机定位为纵向模式 . 但是,在检测文件时有奇怪的问题 . 见下图

enter image description here

enter image description here

正如您在第一张图片中看到的那样,在定制之前,我可以检测到全绿色的纸张 . 在第二张图片中,您可以看到纸张周围画线(drawContours)的错误

我跟着检测纸张的是: GaussianBlur -> Canny edge detection -> 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.以下是原始图片:

enter image description here

@ ilke444,以下是边缘检测后的图像,这完全是我想要的:
enter image description here