Ani*_*lur 0 python opencv computer-vision
这是一个显示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)
Run Code Online (Sandbox Code Playgroud)
我在我的一个项目中使用此函数但我不理解代码的mask1部分(第26行和第27行),
为什么我们为高度为'-h'和宽度为'w'的给定图像创建形状为h + 2,w + 2的mask1?(第26行)
为什么我们必须将这个mask1传递给cv2.floodfill函数?(第27行)
这是示例代码的输入和输出.
请帮忙
您当前实现的简短答案是您不需要使用该参数.您可以简单地在通话中替换mask1
,None
因为您没有使用它.在这里,在这里查看我的答案,并在这里查看floodFill()
没有mask参数的示例.
面具参数只是填补了那里 floodFill()
得到了应用,或者如果你只是想创建一个面具,而不是修改你的形象.您可以使用mask参数在此处查看我的一个简单项目的示例.在这种情况下,我模仿Adobe Photoshop Magic Wand选择工具,所以我只需要掩码而不想修改图像.
floodFill()
如果邻居在像素的某个阈值差异内,则将像素连接到它的邻居是什么.四向连接检查上方和下方以及左侧和右侧的邻居.八向连接另外检查对角线像素.这意味着在边框像素处,您需要一堆if
语句才能检查边框外的像素,或者,您可以简单地在每侧填充一个像素的图像,这样您就不需要特殊情况代码更好,速度更快.
通常,这只是在函数内部完成而不是暴露给用户.但是,floodFill()
如果需要,可以在图像上多次调用,因此Mat
每次调用时创建一个新的填充会使函数变慢.所以相反,我相信,填充会传递给用户,这样如果他们多次调用该函数,填充掩码只会创建一次.
归档时间: |
|
查看次数: |
10471 次 |
最近记录: |