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 简易计算器程序,代码就几行
Aug 29 Python
Python使用urllib模块的urlopen超时问题解决方法
Nov 08 Python
使用Python实现一个简单的项目监控
Mar 31 Python
Python+django实现简单的文件上传
Aug 17 Python
使用Python操作excel文件的实例代码
Oct 15 Python
django2 快速安装指南分享
Jan 05 Python
python数据封装json格式数据
Mar 04 Python
Python requests发送post请求的一些疑点
May 20 Python
让Django支持Sql Server作后端数据库的方法
May 29 Python
linux下python中文乱码解决方案详解
Aug 28 Python
Python网络爬虫四大选择器用法原理总结
Jun 01 Python
Python 阶乘详解
Oct 05 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统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
PHP中error_log()函数的使用方法
2015/01/20 PHP
使用symfony命令创建项目的方法
2016/03/17 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
Laravel实现ApiToken认证请求
2019/10/14 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
js调用webservice构造SOAP进行身份验证
2016/04/27 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
BootStrap中的table实现数据填充与分页应用小结
2016/05/26 Javascript
Bootstrap零基础入门教程(二)
2016/07/18 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
微信小程序 网络通信实现详解
2019/07/23 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
python中列表和元组的区别
2017/12/18 Python
python 初始化一个定长的数组实例
2019/12/02 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
养殖行业的创业计划书
2014/01/05 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
写给医生的感谢信
2015/01/22 职场文书
2015年敬老月活动总结
2015/03/27 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书
Redis Cluster 集群搭建你会吗
2021/08/04 Redis