使用opencv查找具有内部矩形的矩形

llmtgqce  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(145)

我正在尝试使用opencv提取图像文件中包含填充矩形的表行。我用过findcontours和boundingrect。免责声明:我对opencv和图像处理完全陌生,所以这可能不是一个最佳的解决方案。


这就是我到目前为止所做的,它让我得到了图像中所有的表,包括我想要的行。我怎样才能过滤到那一行?

Imgcodecs imageCodecs = new Imgcodecs();
        Mat sourceMat = imageCodecs.imread("image.png");
        Mat grayMat = imageCodecs.imread("image.png");
        Mat threshold = imageCodecs.imread("image.png");
        Mat threshold1 = imageCodecs.imread("image.png");
        Imgproc.cvtColor(sourceMat, grayMat, Imgproc.COLOR_BGR2GRAY);
        Imgproc.threshold(grayMat, threshold, 70, 255, Imgproc.THRESH_BINARY_INV);
        Imgproc.threshold(grayMat, threshold1, 270, 255, Imgproc.THRESH_BINARY);
        Core.bitwise_not(grayMat, threshold);
        Imgcodecs imgcodecs1 = new Imgcodecs();
        imgcodecs1.imwrite("imagethreshold.png", threshold);
        List<MatOfPoint> whiteContours = new ArrayList<>();
        MatOfPoint heirarchy = new MatOfPoint();
        Imgproc.findContours(threshold.clone(), whiteContours, heirarchy, Imgproc.RETR_CCOMP, Imgproc.CHAIN_APPROX_SIMPLE);

        int count = 0;
        // find appropriate bounding rectangles
        for (int i = 0; i < whiteContours.size(); i++) {

            RotatedRect boundingRect = Imgproc.minAreaRect(new MatOfPoint2f(whiteContours.get(i).toArray()));
            Point rotated_rect_points[] = new Point[4];
            boundingRect.points(rotated_rect_points);
            Rect rect = Imgproc.boundingRect(new MatOfPoint(rotated_rect_points));
            Mat roiMat = sourceMat.submat(rect);
            if (rect.area()>15000 && heirarchy.get(0,i) != null) {
//                checking if heirarchy has parent, next or previous contour is -1
                    if(heirarchy.get(0,i)[3]!=-1 && heirarchy.get(0,i)[0] !=-1 && heirarchy.get(0,i)[1] ==-1){

                    //         write to image file
                    Imgcodecs imgcodecs = new Imgcodecs();
                    imgcodecs.imwrite("image" + count + ".png", roiMat);
                    count++;
                }
                }
            }```

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题