Opencv中cv2.floodFill算法的使用


Posted in Python onJune 18, 2021
目录
  • 一、 泛洪算法——floodFill函数原型
  • 二、简单应用
  • 三、应用,结合minareaRect

 

一、 泛洪算法——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:为泛洪算法的种子点,也是根据该点的像素判断决定和其相近颜色的像素点,是否被泛洪处理。
    【类似于Opencv中cv2.floodFill算法的使用
  • 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:为泛洪算法的处理模式。

Opencv中cv2.floodFill算法的使用

  • 低八位 控制算法的连通性,是以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参数失去作用,而是改变对应区域的掩码,设为中间八位的值

Opencv中cv2.floodFill算法的使用

Opencv中cv2.floodFill算法的使用

 

二、简单应用

#泛洪填充(彩色图像填充)
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()

Opencv中cv2.floodFill算法的使用

Opencv中cv2.floodFill算法的使用

 

三、应用,结合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 相关文章推荐
python中的随机函数random的用法示例
Jan 27 Python
Python实现的随机森林算法与简单总结
Jan 30 Python
Django权限机制实现代码详解
Feb 05 Python
Python3 replace()函数使用方法
Mar 19 Python
Django  ORM 练习题及答案
Jul 19 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
Sep 18 Python
opencv-python 读取图像并转换颜色空间实例
Dec 09 Python
Pytorch根据layers的name冻结训练方式
Jan 06 Python
关于python中导入文件到list的问题
Oct 31 Python
python从ftp获取文件并下载到本地
Dec 05 Python
详解matplotlib绘图样式(style)初探
Feb 03 Python
python 镜像环境搭建总结
Sep 23 Python
Python下opencv使用hough变换检测直线与圆
python 网络编程要点总结
Jun 18 #Python
python opencv检测直线 cv2.HoughLinesP的实现
Jun 18 #Python
教你用Python+selenium搭建自动化测试环境
Jun 18 #Python
详解Python函数print用法
Jun 18 #Python
总结Python使用过程中的bug
简单介绍Python的第三方库yaml
Jun 18 #Python
You might like
PHP 函数学习简单小结
2010/07/08 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
2013/01/06 PHP
19个Android常用工具类汇总
2014/12/30 PHP
php无序树实现方法
2015/07/28 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
JavaScript进阶教程(第四课第一部分)
2007/04/05 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
与jquery serializeArray()一起使用的函数,主要来方便提交表单
2011/01/31 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
2011/06/27 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
JS实现选项卡实例详解
2015/11/17 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
浅析vue-router实现原理及两种模式
2020/02/11 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
python实现的解析crontab配置文件代码
2014/06/30 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
2019/02/25 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
Python urlopen()和urlretrieve()用法解析
2020/01/07 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
html5版canvas自由拼图实例
2014/10/15 HTML / CSS
介绍一下OSI七层模型
2012/07/03 面试题
十一个高级MySql面试题
2014/10/06 面试题
新锐科技Java程序员面试题
2016/07/25 面试题
计算机应用专业毕业生求职信
2013/10/24 职场文书
女儿十岁生日答谢词
2014/01/27 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书
oracle通过存储过程上传list保存功能
2021/05/12 Oracle
MySQL系列之十一 日志记录
2021/07/02 MySQL
mysql数据库隔离级别详解
2022/06/16 MySQL