Opencv中cv2.floodFill算法的使用

 更新时间:2021年06月18日 15:37:37   作者:啧啧啧biubiu  
本文结合实例,详细的介绍了泛洪填充算法的具体使用,具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、 泛洪算法——floodFill函数原型

cv2.floodFill(img,mask,seed,newvalue(BGR),(loDiff1,loDiff2,loDiff3),(upDiff1,upDiff2,upDiff3),flag)
  • img:为待使用泛洪算法的图像
  • mask:为掩码层,使用掩码可以规定是在哪个区域使用该算法,如果是对于完整图像都要使用,则掩码层大小为原图行数+2,列数+2.是一个二维的0矩阵,边缘一圈会在使用算法是置为1。而只有对于掩码层上对应为0的位置才能泛洪,所以掩码层初始化为0矩阵。【dtype:np.uint8
  • seed:为泛洪算法的种子点,也是根据该点的像素判断决定和其相近颜色的像素点,是否被泛洪处理。
    【类似于
  • newvalue:是对于泛洪区域新赋的值(B,G,R)
  • (loDiff1,loDiff2,loDiff3):是相对于seed种子点像素可以往下的像素值,即seed(B0,G0,R0),泛洪区域下界为(B0-loDiff1,G0-loDiff2,R0-loDiff3)
  • (upDiff1,upDiff2,upDiff3):是相对于seed种子点像素可以往上的像素值,即seed(B0,G0,R0),泛洪区域上界为(B0+upDiff1,G0+upDiff2,R0+upDiff3)
  • flag:为泛洪算法的处理模式。

  • 低八位 控制算法的连通性,是以seed点为中心,接着判断周围的几个像素点,再将泛洪区域像素点周围的几个像素点进行考虑。 一般为4,8;默认为4
  • 中间八位 与掩码层赋值密切相关,一般使用(255<<8)使中间8位全位1,则值为255,也就是掩码层对应原图的泛洪区域的部分被由原来的初值0赋值成255,如果中间8位为0,则赋值为1.
  • 高八位 由opencv宏参数指定
    • cv2.FLOODFILL_FIXED_RANGE:改变图像,填充newvalue
    • cv2.FLOODFILL_MASK_ONLY:不改变原图像,也就是newvalue参数失去作用,而是改变对应区域的掩码,设为中间八位的值

二、简单应用

#泛洪填充(彩色图像填充)
import cv2
import numpy as np
def fill_color_demo(image):
    copyImg = image.copy()
    h, w = image.shape[:2]
    mask = np.zeros([h+2, w+2],np.uint8)   #mask必须行和列都加2,且必须为uint8单通道阵列
    #为什么要加2可以这么理解:当从0行0列开始泛洪填充扫描时,mask多出来的2可以保证扫描的边界上的像素都会被处理
    cv.floodFill(copyImg, mask, (220, 250), (0, 255, 255), (100, 100, 100), (50, 50 ,50), cv.FLOODFILL_FIXED_RANGE)
    cv.imshow("fill_color_demo", copyImg)
 
src = cv.imread('E:/imageload/baboon.jpg')
cv.namedWindow('input_image', cv.WINDOW_AUTOSIZE)
cv.imshow('input_image', src)
fill_color_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

三、应用,结合minareaRect

cv2.floodFill(initial_car,mask,(seed_x,seed_y),(255,0,0),(loDiff,loDiff,loDiff),(upDiff,upDiff,upDiff),flag)
 
points = []
row,column = mask.shape
 
for i in range(row):
    for j in range(column):
        if mask[i][j]==255:
           points.append((j,i))   #点应该输入点坐标(列,行)
points = np.asarray(points)
new_rect = cv2.minAreaRect(points)

到此这篇关于Opencv中cv2.floodFill算法的使用的文章就介绍到这了,更多相关Opencv cv2.floodFill内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现批量把SVG格式转成png、pdf格式的代码分享

    Python实现批量把SVG格式转成png、pdf格式的代码分享

    这篇文章主要介绍了Python实现批量把SVG格式转成png、pdf格式的代码分享,本文代码需要引用一个第三方模块cairosvg,需要的朋友可以参考下
    2014-08-08
  • python时间日期函数与利用pandas进行时间序列处理详解

    python时间日期函数与利用pandas进行时间序列处理详解

    python标准库包含于日期(date)和时间(time)数据的数据类型,datetime、time以及calendar模块会被经常用到,而pandas则可以对时间进行序列化排序
    2018-03-03
  • tensorflow 1.0用CNN进行图像分类

    tensorflow 1.0用CNN进行图像分类

    这篇文章主要为大家详细介绍了tensorflow 1.0用CNN进行图像分类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Python中文件遍历的两种方法

    Python中文件遍历的两种方法

    这篇文章主要介绍了Python中文件遍历的两种方法,使用的OS模块的os.walk和os.listdir实现,需要的朋友可以参考下
    2014-06-06
  • Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程

    Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程

    最近Python 3发布了新版本Python 3.6.0,好像又加入了不少黑魔法!由于暂时不能使用 apt-get 的方式安装 Python 3.6,所以还是直接编译源码安装吧。下面这篇文章就介绍了在Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程,需要的朋友可以参考下。
    2016-12-12
  • pytorch点乘与叉乘示例讲解

    pytorch点乘与叉乘示例讲解

    今天小编就为大家分享一篇pytorch点乘与叉乘示例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 使用Python字符串访问与修改局部变量的实现代码

    使用Python字符串访问与修改局部变量的实现代码

    这篇文章主要介绍了使用Python字符串访问与修改局部变量,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • python正则表达式匹配[]中间为任意字符的实例

    python正则表达式匹配[]中间为任意字符的实例

    今天小编就为大家分享一篇python正则表达式匹配[]中间为任意字符的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python的常见矩阵运算(小结)

    python的常见矩阵运算(小结)

    这篇文章主要介绍了python的常见矩阵运算(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Python中类的定义、继承及使用对象实例详解

    Python中类的定义、继承及使用对象实例详解

    这篇文章主要介绍了Python中类的定义、继承及使用对象,较为详细的分析了Python中类的相关概念与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04

最新评论