zoukankan      html  css  js  c++  java
  • floodFill填充函数函数(六)

     

    一 函数原型

    参数解释:

      image 【输入/输出】1或者3通道、 8bit或者浮点图像。仅当参数flags的FLOODFILL_MASK_ONLY标志位被设置时image不会被修改,否则会被修改。

       mask 【输入/输出】 操作掩码,必须为单通道、8bit,且比image宽2个像素、高2个像素。使用前必须先初始化。Flood-filling无法跨越mask中的非0像素。例如,一个边缘检测的结果可以作为mask来阻止边缘填充。在输出中,mask中与image中填充像素对应的像素点被设置为1,或者flags标志位中设置的值(详见flags标志位的解释)。此外,该函数还用1填充了mask的边缘来简化内部处理。因此,可以在多个调用中使用同一mask,以确保填充区域不会重叠。

       seedPoint 起始像素点。

       newVal   重绘像素区域的新的填充值(颜色)。

       rect      可选输出参数,返回重绘区域的最小绑定矩形。

        loDiff     当前选定像素与其连通区中相邻像素中的一个像素,或者与加入该连通区的一个seedPoint像素,二者之间的最大下行差异值。

       upDiff    当前选定像素与其连通区中相邻像素中的一个像素,或者与加入该连通区的一个seedPoint像素,二者之间的最大上行差异值。

       flags     flags标志位是一个32bit的int类型数据,其由3部分组成: 0-7bit表示邻接性(4邻接、8邻接);8-15bit表示mask的填充颜色;16-31bit表示填充模式(详见填充模式解释)

      通俗解释:floodFill( 1.操作的图像, 2.掩模, 3.起始像素值,4.填充的颜色, 5.填充颜色的低值, 6.填充颜色的高值 ,7.填充的方法)

    填充方法

    FLOODFILL_FIXED_RANGE   颜色填充
     
    FLOODFILL_MASK_ONLY mask的指定的位置为零时才填充,不为零不填充

    二 示例代码

    #指定位置填充
    def fill2_image():
        image = np.zeros([200, 200, 3], np.uint8)
        #image[100:300, 100:300, :] = 255
        cv.imshow("define", image)
        cv.imwrite('define.jpg',image)
        # mask 的高宽比原图多2,即h+2,w+2
        mask = np.ones([202, 202, 1], np.uint8)
        # mask需要填充的位置的像素设置为0
        mask[100:150, 100:150] = 0
        #调用floodFill函数填充 (0,0,255)指定红色填充
        cv.floodFill(image, mask, (100, 100), (0, 0, 255), cv.FLOODFILL_MASK_ONLY)
        cv.imshow("fill2", image)
        cv.imwrite('fill2.jpg',image)
    
    fill2_image()
    cv.waitKey(0)
    cv.destroyAllWindows()

    填充原理图

    三 指定颜色填充代码

    import cv2 as cv
    import numpy as np
    
    #指定颜色替换
    def fill_image(image):
        copyImage=image.copy() #复制图片
        h,w=image.shape[:2]
        mask=np.zeros([h+2,w+2],np.uint8)
        #(0,80) 起始点,(0,100,255) 蓝色 ,(100,100,50)棕色 ,(50,50,50) 浅黑
        cv.floodFill(copyImage,mask,(0,80),(0,100,255),(100,100,50),(50,50,50),cv.FLOODFILL_FIXED_RANGE)
        cv.imshow('fill',copyImage)
    
    
    src=cv.imread('./hua.jpg')
    cv.imshow('before',src)
    fill_image(src)
    cv.waitKey(0)
    cv.destroyAllWindows()

      通俗解释:floodFill( 1.操作的图像, 2.掩模, 3.起始像素值,4.填充的颜色, 5.填充颜色的低值, 6.填充颜色的高值 ,7.填充的方法)

    参数5.填充颜色的低值就是:参数3 减去 参数5

    参数6.填充颜色的高值就是:参数3 加上 参数6

    即是这两个数值之间的色素替换为参数4的颜色

    效果展示

  • 相关阅读:
    【SpringBoot】 理解SpringBoot的启动原理
    【SpringBoot】SpringBoot的基础,全面理解bean的生命周期
    【转】 Linux 命令解释(Linux基础二)
    【转】 Linux 的目录详解 (Linux基础一)
    【SpringBoot】 一种解决接口返回慢的方式
    【Jmeter基础】 Linux上运行Jmeter
    【SpingBoot】 测试如何使用SpringBoot搭建一个简单后台1
    单例模式@Singleton在测试中的运用
    性能测试基础 ---TCP通信过程的状态码与过程,以及出现错误码的分析(TIME_WAIT,CLOSE_WAIT)
    Spring5源码分析(007)——IoC篇之加载BeanDefinition总览
  • 原文地址:https://www.cnblogs.com/angle6-liu/p/10658169.html
Copyright © 2011-2022 走看看