【问题标题】:Find and eliminate contours opencv查找和消除轮廓opencv
【发布时间】:2018-01-18 20:49:13
【问题描述】:

我正在开发一个程序,该程序可以提取拼图上的贴纸,然后找到它们的 RGB。目前,我正处于想要删除任何不是“方形”的轮廓的地步。我想知道我怎么能做到这一点。

我所做的是加载图像,将其变灰,模糊,精巧的边缘检测,扩大它找到轮廓并绘制它们。

有没有办法可以在轮廓周围绘制而不是填充它们?并删除周围大小不大致相同或几乎呈 90 度角的轮廓?

public static void main(String[] args) {
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

    Mat capturedFrame = Imgcodecs.imread("first.png");

    //Gray
    Mat gray = new Mat();
    Imgproc.cvtColor(capturedFrame, gray, Imgproc.COLOR_BGR2GRAY);

    //Blur
    Mat blur = new Mat();
    Imgproc.blur(gray, blur, new Size(3,3));
    //Canny image
    Mat canny = new Mat();
    Imgproc.Canny(blur, canny, 20, 40, 3, true);

    Imgcodecs.imwrite("test.png", canny);

    //System.exit(0);
    Mat kernel = Imgproc.getStructuringElement(1, new Size(3,3));
    Mat dilated = new Mat();
    Imgproc.dilate(canny,dilated, kernel);

    List<MatOfPoint> contours = new ArrayList<>();
    //find contours
    Imgproc.findContours(dilated, contours, new Mat(), Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_NONE);
    //draw contours

    Imgproc.cvtColor(capturedFrame, capturedFrame, Imgproc.COLOR_BGR2RGB);
    for(int i = 0; i < contours.size(); i++){
        Imgproc.drawContours(capturedFrame, contours, i, new Scalar(0, 0, 255), -1);
    }

    Imgcodecs.imwrite("after.png", capturedFrame);

    Imshow img = new Imshow("firstImg");    
    img.show(capturedFrame);
}

这是初始图像:

这是绘制轮廓的图像:

【问题讨论】:

    标签: java image opencv contour


    【解决方案1】:

    要绘制非填充轮廓,请使用非负粗细: Imgproc.drawContours(capturedFrame, contours, i, new Scalar(0, 0, 255), 1);例如。

    去除不必要的查找轮廓区域,绘制时跳过太大或太小的区域。

    【讨论】:

    • 谢谢我现在正在画轮廓:)。有没有一种方法可以让它更“灵活”,比如看它是否具有某种方形形状,例如边长相同或轮廓几乎成 90 度?我问的原因是因为图像并不总是这个,因为它是一个捕获的帧,立方体可以在更近或更远的地方被捕获。
    • 如果您的轮廓区域靠近 minAreaRect 区域,您当然可以找到 minAreaRect,这意味着您的轮廓接近矩形。您可以通过查找 minRect 边的比率来控制它是否为正方形。
    猜你喜欢
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 2012-12-28
    • 2011-06-13
    • 1970-01-01
    • 2020-06-14
    • 2016-08-11
    相关资源
    最近更新 更多