【问题标题】:How does cv2.floodfill work?cv2.floodfill 是如何工作的?
【发布时间】:2017-11-27 18:38:05
【问题描述】:

这里是一个示例代码,展示了 cv2.floodfill 函数的用法

import cv2
import numpy as np
import os

def imshow(img):
    cv2.imshow('img', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


img = cv2.imread('test4.png')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

thresh = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY_INV,3,1)

_, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_NONE)

mask = np.zeros(img.shape[:-1],np.uint8)

cv2.drawContours(mask,contours,-1,(255,255,255),-1)

height, width = img.shape[:-1]

mask1 = np.zeros((height+2, width+2), np.uint8)     # line 26
cv2.floodFill(mask,mask1,(0,0),255)     # line 27
mask_inv=cv2.bitwise_not(mask)

imshow(mask_inv)

我在我的一个项目中使用此功能,但我不理解代码的 mask1 部分(第 26 行和第 27 行) 也就是说,

为什么我们要为高度为“h”和宽度为“w”的给定图像创建形状为 h+2、w+2 的 mask1?(第 26 行)

为什么我们必须将此 mask1 传递给 cv2.floodfill 函数?(第 27 行)

这里是示例代码的输入输出。

输入图像

输出图像

请帮忙

【问题讨论】:

  • 可能是因为overload that doesn't take a maskisn't exposed to Python. (它需要在前面有一个CV_EXPORTS_W 而不仅仅是CV_EXPORTS
  • 请注意,如果您不使用该参数,则可以将None 用于mask1
  • @AlexanderReynolds 我想这可以解释为什么没有包装其他重载。
  • @DanMašek 我怀疑您需要包含形状为(h+2, w+2) 的掩码的原因只是为了使底层函数不需要在每次调用函数时都创建新的填充掩码(对于边界像素)。对于重复调用,floodFill() 是这样做的,最好在调用之前只创建一次填充掩码。

标签: python opencv computer-vision


【解决方案1】:

您当前实现的简短答案是您不需要使用该参数。您可以在通话中简单地将mask1 替换为None,因为您没有使用它。查看我的答案 hereherehere 以查看不带掩码参数的 floodFill() 示例。

mask 参数只是填写 where floodFill() 已被应用,或者如果您只想创建一个遮罩而不修改您的图像。您可以在我的一个简单项目here 上使用 mask 参数查看示例。在这种情况下,我是在模仿 Adob​​e Photoshop Magic Wand 选择工具,所以我只需要蒙版,不想修改图像。

floodFill() 所做的是将一个像素连接到它的邻居,如果邻居在像素的某个阈值差之内。四向连通性检查上下、左右的邻居。八向连通性还检查对角线像素。这意味着在边界像素处,您要么需要一堆 if 语句来不检查边界外的像素,要么,您可以简单地在图像的每一侧填充一个像素,这样您就不需要特殊情况了,这两者在代码中的阅读效果更好并且速度更快。

通常,这只会在函数内部完成,不会暴露给用户。但是,floodFill() 旨在根据需要在图像上多次调用,因此每次调用时创建一个新的填充 Mat 会使函数变慢。所以相反,我相信填充会传递给用户,这样如果他们多次调用该函数,填充掩码只会创建一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-28
    • 2018-11-25
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 2023-03-12
    • 2017-01-15
    相关资源
    最近更新 更多