Ответ 1
Почему бы вам не использовать второй вариант cv:: floodFill, чтобы создать маску?
int floodFill (InputOutputArray image, InputOutputArray mask, Point seedPoint, Scalar newVal, Rect * rect = 0, Scalar loDiff = Scalar(), Scalar upDiff = Scalar(), int flags = 4)
-
Исходное изображение
cv::Mat img = cv::imread("squares.png");
-
Первый вариант
cv::floodFill(img, cv::Point(150,150), cv::Scalar(255.0, 255.0, 255.0));
Это
img
-
Второй вариант
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
. img
не меняет
Если вы это сделаете, обратите внимание, что:
Поскольку маска больше заполненного изображения, пиксель (x, y) в изображении соответствует пикселю (x + 1, y + 1) в маске.