零基础入门机器视觉(五)

泛洪填充和二值填充
这篇文章写的很好

话不多说,先上代码

def fill_color_demo(image):
    copyImg = image.copy()
    h, w = image.shape[:2]
    mask = np.zeros([h + 2, w + 2], np.uint8) #必须为无符号8位
    cv.floodFill(copyImg, mask, (30, 30), (0, 255, 255), (100, 100, 100), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)
    #floodFIll(1.操作的对象,2.掩模,3.该位置的像素值, 4.填充的颜色, 5.填充颜色的低值, 6.填充颜色的高值, 7.填充的方法)
    #从像素点(30,30)点开始  低值是当前(30, 30)这个点的像素 为x,则低值为 x - (100,100 ,100), 高值为 x + (50, 50, 50)
    cv.imshow('input image', copyImg)

代码中mask = np.zeros([h + 2, w + 2], np.uint8) 至于为什么要在原来的宽和高上加二,这就是简单的规定,不必深究。
cv.FLOODFILL_FIXED_RANGE表示的是填充的方法
低值和高值表示填充的范围

根据我个人的理解,简而言之就是通过 掩模mask 将 该点填充范围的像素复制上去,然后改变这些范围像素的值,然后将这些值重新的贴回去

def fill_binary():
    image = np.zeros([400, 400, 3], np.uint8)
    image[100:300, 100:300, :] = 255
    cv.imshow('fill_binary', image)

    mask = np.ones([402, 402, 1], np.uint8)  #二值填充一定要是单通道
    mask[101:301, 101:301]  = 0  #为 0 的时候才填充
    cv.floodFill(image,mask, (200, 200), (0, 0, 255), cv.FLOODFILL_MASK_ONLY)
    cv.imshow("filled binary", image)

二值填充只填充为0的地方,所以先建立一个单值的掩模,让需要填充的地方为0,以(200, 200)为起点对周围为零的地方填充(0,0,255)红色,同样的cv.FLOODFILL_MASK_ONLY为填充的方法

你可能感兴趣的:(机器视觉)