OpenCV对象检测和拆分,聚类?

时间:2015-11-06 10:01:48

标签: java image opencv image-processing

我目前正在开发一种应用程序,它将扫描图像(包含多张收据)拆分为单独的收据图像。

以下是示例图片:

sample image

我能够使用OpenCV的canny功能检测扫描图像中每张收据的边缘。

以下是检测到边缘的样本图像:

sample image with detected edges

...示例代码是

    Mat src = Highgui.imread(filename);
    Mat gray = new Mat();

    int threshold = 12;

    Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
    Imgproc.blur(gray, gray, new Size(3, 3));
    Imgproc.Canny(gray, gray, threshold, threshold * 3, 3, true);

    List<MatOfPoint> contours = new ArrayList<>();
    Mat hierarchy = new Mat();

    Imgproc.findContours(gray, contours, hierarchy,
            Imgproc.RETR_CCOMP,
            Imgproc.CHAIN_APPROX_SIMPLE);

    if (hierarchy.size().height > 0 && hierarchy.size().width > 0) {
        for (int idx = 0; idx >= 0; idx = (int) hierarchy.get(0, idx)[0]) {
            Rect rect = Imgproc.boundingRect(contours.get(idx));
            Core.rectangle(src, new Point(rect.x, rect.y),
                    new Point(rect.x + rect.width, rect.y + rect.height),
                    new Scalar(255, 0, 0));
        }
    }

现在我的问题是,我不知道如何识别第三张收据,因为与前两张收据不同,它没有被包围在一个矩形形状中,我将用它作为分割图像的基础。

我听说要提取第三张图片,我必须使用像DBSCAN这样的聚类算法,遗憾的是我找不到一张。

任何人都知道如何识别第3张图片?

提前谢谢!

0 个答案:

没有答案