Python 从c+转换洪水填充开放cv+;巨蟒

Python 从c+转换洪水填充开放cv+;巨蟒,python,c++,opencv,Python,C++,Opencv,我将OpenCV代码从C++转换为Python,并在FooRoad附近插入某处。 C++实现是 Mat floodFilled = cv::Mat::zeros(dilateGrad.rows+2, dilateGrad.cols+2, CV_8U); floodFill(dilateGrad, floodFilled, cv::Point(0, 0), 0, 0, cv::Scalar(), cv::Scalar(), 4 + (255 << 8) + cv::FLOODFILL

我将OpenCV代码从C++转换为Python,并在FooRoad附近插入某处。

C++实现是

Mat floodFilled = cv::Mat::zeros(dilateGrad.rows+2, dilateGrad.cols+2, CV_8U);
floodFill(dilateGrad, floodFilled, cv::Point(0, 0), 0, 0, cv::Scalar(), cv::Scalar(), 4 + (255 << 8) + cv::FLOODFILL_MASK_ONLY);
floodFilled = cv::Scalar::all(255) - floodFilled;
Mat temp;
floodFilled(Rect(1, 1, dilateGrad.cols-2, dilateGrad.rows-2)).copyTo(temp);

我对Python中的OpenCV有新的了解,任何人的帮助都是值得赞赏的。< /P> < P> >代码> RcTe>代码>操作符,在最后一行C++代码中指定“代码> ROI填充的Mat的ROI,并将ROI复制到Mat TEMP < < /P> 类似的行为可以在python代码中实现,如下所示:

temp = floodFilled[1:h-2, 1:w-2].copy()
至于
Scalar
操作符,您必须使用python的元组来代替
Scalar
。就像
Scalar::all(255)
将等于
tuple([255]*NumberOfChannels)
。对于您当前的情况,NumberOfChannels是1,因此它只相当于255

代替空的
Scalar()
,只需将
None
作为参数传递即可

您的最终代码可能如下所示:

h, w = dilateGrad.shape[:2]
floodFilled = np.zeros((h+2,w+2), dtype = np.uint8)
cv2.floodFill(dilateGrad, floodFilled, (0,0), 255, None, None, cv2.FLOODFILL_MASK_ONLY)
floodFilled =  (255) - floodFilled
temp = floodFilled[1:h-2, 1:w-2].copy()
仅供参考:

cv2.rectangle
函数的目的是在图像上绘制一个矩形


np.all
计算作为参数传递给它的二进制条件列表,只有当列表中的所有条件都计算为True时,才会返回True。

有什么问题?@GPPK我无法解码泛光填充的最后一部分,即为泛光填充创建标量值以及如何创建矩形Hank你是信息,但是我怎么能在Python中使用C++的标量函数呢?我不能正确地得到我的cv2.floodfill,因为我得到的是一个全黑的图像。谢谢你的正确解释
h, w = dilateGrad.shape[:2]
floodFilled = np.zeros((h+2,w+2), dtype = np.uint8)
cv2.floodFill(dilateGrad, floodFilled, (0,0), 255, None, None, cv2.FLOODFILL_MASK_ONLY)
floodFilled =  (255) - floodFilled
temp = floodFilled[1:h-2, 1:w-2].copy()