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 相关文章推荐
Pyramid Mako模板引入helper对象的步骤方法
Nov 27 Python
python使用smtplib模块通过gmail实现邮件发送的方法
May 08 Python
python中的全局变量用法分析
Jun 09 Python
构建Python包的五个简单准则简介
Jun 15 Python
200行自定义python异步非阻塞Web框架
Mar 15 Python
python机器学习之KNN分类算法
Aug 29 Python
六行python代码的爱心曲线详解
May 17 Python
在Python3 numpy中mean和average的区别详解
Aug 24 Python
python实现生成Word、docx文件的方法分析
Aug 30 Python
python 图片二值化处理(处理后为纯黑白的图片)
Nov 01 Python
python使用配置文件过程详解
Dec 28 Python
Python中Qslider控件实操详解
Feb 20 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
WML,Apache,和 PHP 的介绍
2006/10/09 PHP
php 文件上传代码(限制jpg文件)
2010/01/05 PHP
php自动加载的两种实现方法
2010/06/21 PHP
ThinkPHP实现跨模块调用操作方法概述
2014/06/20 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
动态创建的表格单元格中的事件实现代码
2008/12/30 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
JQuery中attr方法和removeAttr方法用法实例
2015/05/18 Javascript
如何利用JQuery实现从底部回到顶部的功能
2016/12/27 Javascript
详解vue路由篇(动态路由、路由嵌套)
2019/01/27 Javascript
微信小程序自定义组件实现环形进度条
2020/11/17 Javascript
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
详解python如何在django中为用户模型添加自定义权限
2018/10/15 Python
python DataFrame 取差集实例
2019/01/30 Python
PyTorch基本数据类型(一)
2019/05/22 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
对Python中一维向量和一维向量转置相乘的方法详解
2019/08/26 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
2019/10/30 Python
手把手教你将Flask应用封装成Docker服务的实现
2020/08/19 Python
如何使用Pytorch搭建模型
2020/10/26 Python
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
Laura官网:加拿大女性的顶级时尚目的地
2019/09/20 全球购物
工商管理系学生的自我评价分享
2013/11/29 职场文书
政风行风评议心得体会
2014/10/21 职场文书
汇报材料怎么写
2014/12/30 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书
Pygame如何使用精灵和碰撞检测
2021/11/17 Python
MySQL创建管理HASH分区
2022/04/13 MySQL
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电