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中Collections模块的Counter容器类使用教程
May 31 Python
基于Python的接口测试框架实例
Nov 04 Python
Python实现通讯录功能
Feb 22 Python
python实现自动发送报警监控邮件
Jun 21 Python
python读取图片并修改格式与大小的方法
Jul 24 Python
python 获取键盘输入,同时有超时的功能示例
Nov 13 Python
django列表筛选功能的实现代码
Mar 27 Python
Python+PyQt5+MySQL实现天气管理系统
Jun 16 Python
基于OpenCV的路面质量检测的实现
Nov 04 Python
python自动化发送邮件实例讲解
Jan 04 Python
浅析pandas随机排列与随机抽样
Jan 22 Python
教你用Python写一个植物大战僵尸小游戏
Apr 25 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自动识别字符集并完成转码详解
2013/08/02 PHP
PHP中的插件机制原理和实例
2014/07/08 PHP
php使用pear_smtp发送邮件
2016/04/15 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
2017/04/03 PHP
php命令行模式代码实例详解
2021/02/26 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
2021/03/09 PHP
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
判断文件是否正在被使用的JS代码
2013/12/21 Javascript
js 对小数加法精度处理示例说明
2013/12/27 Javascript
javascript实现回车键提交表单方法总结
2015/01/10 Javascript
JavaScript每天定时更换皮肤样式的方法
2015/07/01 Javascript
AngularJS 使用 UI Router 实现表单向导
2016/01/29 Javascript
JS实现仿PS的调色板效果完整实例
2016/12/21 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
2019/05/07 Javascript
Vue.js实现备忘录功能
2019/06/26 Javascript
[48:21]林俊杰圣堂刺客超神杀戮秀
2014/10/29 DOTA
Python中的魔法方法深入理解
2014/07/09 Python
Python中__init__和__new__的区别详解
2014/07/09 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
django静态文件加载的方法
2018/05/20 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
Python3.7中安装openCV库的方法
2018/07/11 Python
Python分割训练集和测试集的方法示例
2019/09/19 Python
Python中if有多个条件处理方法
2020/02/26 Python
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
图书室管理制度
2014/01/19 职场文书
二年级数学教学反思
2014/01/21 职场文书
酒店节能减排方案
2014/05/26 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
2016关于军训的心得体会
2016/01/11 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
Python中Permission denied的解决方案
2021/04/02 Python
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android