使用opencv java检测图像中文档的边界

时间:2014-11-20 09:22:01

标签: java android opencv image-processing feature-detection

我想在android中检测文档的4个角。我使用的是opencv库。

我使用以下方法 - (1)灰度图像 (2)应用中值模糊 (3)应用自适应阈值 (4)Canny边缘检测 (5)找到轮廓 (6)找到最大的轮廓 (7)获得最大轮廓的边角

我的代码是

srcImg = Utils.loadResource(this, R.drawable.test1, Highgui.CV_LOAD_IMAGE_COLOR);
Imgproc.cvtColor(srcImg, srcImg, Imgproc.COLOR_BGR2GRAY);
Imgproc.medianBlur(srcImg, srcImg, 9);
Imgproc.adaptiveThreshold(srcImg, srcImg, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 11, 2);
Imgproc.Canny(srcImg, srcImg, 50, 80);


Imgproc.findContours(srcImg,contours , hierarchy, Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE);

在精确边缘检测之后,许多点处的轮廓边界被破坏,因为图像中检测到的最大轮廓不是文档的实际边界。在某些图像中,最大轮廓显示边界的某些部分,但在某些图像中,它指向文档的中心或完全位于文档之外

(A)如何在这种情况下继续前进?

我应用的另一种方法是应用houghes线变换并计算以90度角相交的线的交点,但在这种情况下没有得到精确点。当我把88

(B)如何处理那么多分数

(C)还是我需要遵循完全不同的方法?