OpenCV - Floodfill onto new Mat

前端 未结 1 1392
余生分开走
余生分开走 2020-12-09 05:25

Given a point on an image, I\'d like to floodfill all points connected to that point - but onto a new image. A naive way to do this would be to floodfill the original image

1条回答
  •  有刺的猬
    2020-12-09 05:52

    Why don't you use the second variant of cv::floodFill to create a mask?

    int floodFill(InputOutputArray image, InputOutputArray mask, Point seedPoint, Scalar newVal, Rect* rect=0, Scalar loDiff=Scalar(), Scalar upDiff=Scalar(), int flags=4 )


    • Original image
    cv::Mat img = cv::imread("squares.png");
    

    squares

    • First variant
    cv::floodFill(img, cv::Point(150,150), cv::Scalar(255.0, 255.0, 255.0));
    

    img

    This is the img

    • Second variant
    cv::Mat mask = cv::Mat::zeros(img.rows + 2, img.cols + 2, CV_8U);
    cv::floodFill(img, mask, cv::Point(150,150), 255, 0, cv::Scalar(), cv::Scalar(),
      4 + (255 << 8) + cv::FLOODFILL_MASK_ONLY);
    

    mask

    This is the mask. img doesn't change


    If you go with this though, note that:

    Since the mask is larger than the filled image, a pixel (x,y) in image corresponds to the pixel (x+1, y+1) in the mask.

    0 讨论(0)
提交回复
热议问题