我试图在下面的图像上使用floodFill提取天空:
python - OpenCV-如何对RGB图像使用FloodFill?-LMLPHP
但是,即使我设置了loDiff=Scalar(0,0,0)upDiff=Scalar(255,255,255),结果也只是显示种子点而不会变大(绿色点):
python - OpenCV-如何对RGB图像使用FloodFill?-LMLPHP
代码:

Mat flood;
Point seed = Point(180, 80);
flood = imread("D:/Project/data/1.jpeg");
cv::floodFill(flood, seed, Scalar(0, 0, 255), NULL, Scalar(0, 0, 0), Scalar(255, 255, 255));
circle(flood, seed, 2, Scalar(0, 255, 0), CV_FILLED, CV_AA);
这是结果(红色点是种子):
python - OpenCV-如何对RGB图像使用FloodFill?-LMLPHP
如何设置功能以获得更大的区域(如整个天空)?

最佳答案

您需要正确设置loDiffupDiff参数。

参见floodFill documentation:



这是一个Python代码示例:

import cv2
flood = cv2.imread("1.jpeg");

seed = (180, 80)

cv2.floodFill(flood, None, seedPoint=seed, newVal=(0, 0, 255), loDiff=(5, 5, 5, 5), upDiff=(5, 5, 5, 5))
cv2.circle(flood, seed, 2, (0, 255, 0), cv2.FILLED, cv2.LINE_AA);

cv2.imshow('flood', flood)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果:
python - OpenCV-如何对RGB图像使用FloodFill?-LMLPHP

09-07 07:11