1

我是 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 边缘检测 -> 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,以下是边缘检测后的图像,这正是我想要的: 在此处输入图像描述

4

0 回答 0