1.ROI
ROI(region of interest),感兴趣区域。机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。

图片截取、合并、填充

import cv2 as cvsrc = cv.imread('C:\pics\samples\data\lena.jpg')
cv.namedWindow('first_image',cv.WINDOW_AUTOSIZE)
cv.imshow('first_image',src)
face = src[200:300,200:400]   #选择200:300行、200:400列区域作为截取图像
gray = cv.cvtColor(face,cv.COLOR_BGR2GRAY)  #生成的灰度图是单通道图像
backface = cv.cvtColor(gray,cv.COLOR_GRAY2RGB)   #将单通道图像转换为三通道RGB灰度图,因为只有三通道的backface才可以赋给三通道的src
src[200:300,200:400] = backface
cv.imshow("face",src)
cv.waitKey(0)
cv.destoryAllWindows()


2.泛洪填充(彩色图像填充)

import cv2 as cv
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(r'C:\pics\beay.png')
cv.namedWindow('input_image', cv.WINDOW_AUTOSIZE)
cv.imshow('input_image', src)
fill_color_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()


1.opencv里的mask都是为uin8类型的单通道阵列

2.泛洪填充算法也叫漫水填充算法。opencv的floodFill函数原型: floodFill(image, mask, seedPoint, newVal[, loDiff[, upDiff[, flags]]]) -> retval, image, mask, rect

image参数表示输入/输出1或3通道,8位或浮点图像。

mask参数表示掩码,该掩码是单通道8位图像,比image的高度多2个像素,宽度多2个像素。填充时不能穿过输入掩码中的非零像素。

seedPoint参数表示泛洪算法(漫水填充算法)的起始点。

newVal参数表示在重绘区域像素的新值。

loDiff参数表示当前观察像素值与其部件邻域像素值或待加入该组件的种子像素之间的亮度或颜色之负差的最大值。

upDiff参数表示当前观察像素值与其部件邻域像素值或待加入该组件的种子像素之间的亮度或颜色之正差的最大值。

flags参数:操作标志符,包含三部分:(参考https://www.cnblogs.com/little-monkey/p/7598529.html)

低八位(0~7位):用于控制算法的连通性,可取4(默认)或8。

中间八位(8~15位):用于指定掩码图像的值,但是如果中间八位为0则掩码用1来填充。

高八位(16~32位):可以为0或者如下两种标志符的组合:

FLOODFILL_FIXED_RANGE:表示此标志会考虑当前像素与种子像素之间的差,否则就考虑当前像素与相邻像素的差。FLOODFILL_MASK_ONLY:表示函数不会去填充改变原始图像,而是去填充掩码图像mask,mask指定的位置为零时才填充,不为零不填充。

3.泛洪填充(二值图像填充)

#泛洪填充(二值图像填充)
import cv2 as cv
import numpy as np
def fill_binary():image = np.zeros([400, 400, 3], np.uint8)image[100:300, 100:300] = 255cv.imshow("fill_binary", image)mask = np.ones([402, 402], np.uint8)   #mask要保证比原图像高和宽都多2mask[101:301, 101:301] = 0cv.floodFill(image, mask, (200,200), (255 , 0, 0), cv.FLOODFILL_MASK_ONLY) #mask不为0的区域不会被填充,mask为0的区域才会被填充cv.imshow("filled_binary", image)
fill_binary()
cv.waitKey(0)
cv.destroyAllWindows()


1.不管是FLOODFILL_FIXED_RANGE还是FLOODFILL_MASK_ONLY操作,泛洪填充都不会填充掩膜mask的非零像素区域
2. mask[101:301, 101:301] = 0 这条语句为什么是101:301而不是100:300呢?我觉得应该是掩膜mask是比原图像左右上下都多了1,所以掩膜mask左右一共比原图像多2,上下也比原图像多2。那么原图像的100就自然对应到掩膜的101,同样原图像的300就自然对应到掩膜的301。
3.当FLOODFILL_MASK_ONLY设置了的时候,原图不会改变,只会用中间八位的值填冲mask。 floodFill的flags参数的中间八位的值就是用于指定填充掩码图像的值的,但是如果flags中间八位的值为0,则掩码会用1来填充。

很多问题参考https://www.cnblogs.com/FHC1994/p/9033580.html,感谢!!!

RIO与泛洪填充——(OpenCV+Python)相关推荐

  1. OpenCV for Python之图像RIO与泛洪填充

    OpenCV for Python之图像RIO与泛洪填充 1 ROI与泛函填充 2 ROI 3 泛洪填充 Opencv4 官方文档 : https://docs.opencv.org/4.2.0/ O ...

  2. 【opencv-python 6】 获取RIO、泛洪填充

    (1)获取RIO区域 (2)泛洪填充 import cv2 as cv import numpy as np# 获取ROI src = cv.imread('D:\images\yuanyuan.pn ...

  3. [python opencv 计算机视觉零基础到实战] 八、ROI泛洪填充

    一.学习目标 了解什么是ROI 了解floodFill的使用方法 如有错误欢迎指出~ 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[pyth ...

  4. OpenCV+python:ROI与泛洪填充

    1,ROI 感兴趣区(Region of Interest,ROI) 是图像的一部分,它通过在图像上选择或使用诸如设定阈值(thresholding) 或者从其他文件(如矢量> 转换获得等方法生 ...

  5. OpenCV中泛洪填充算法解析与应用

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 泛洪填充(Flood Fill)很多时 ...

  6. python填充红色_一起学opencv-python七(ROI,泛洪填充和颜色替换)

    ROI 这个ROI是我们自己选择的,ROI就是图像的一个子集,ROI也可以说是我们需要进行操作的一个区域或者说我们选中的区域.我下面是和opencv的滑条结合了一下,就是滑动滑条,ROI的区域会跟着变 ...

  7. OpenCV之ROI和泛洪填充

    一.获取RIO区域 import cv2 as cv import numpy as np print("----------hello python----------") sr ...

  8. OpenCV实现FloodFill泛洪填充算法的代码及相关函数详解

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 FloodFill泛洪填充算法是在很多图形绘制软 ...

  9. 西北乱跑娃 --- opencv泛洪填充学习笔记

    一.前言 泛洪填充算法也叫漫水填充算法.在网上查阅了很多的关于泛洪填充的案例但是一直都表示理解不了参数的具体作用,在自己的研究中才慢慢有所了解. 二.泛洪填充 import cv2 import ma ...

最新文章

  1. hdu 5172(RMQ+前缀和)
  2. Java开发环境!java写猜数字小游戏
  3. php 二维数组排序函数,php自定义函数实现二维数组排序功能
  4. 微信小程序用户数据解密
  5. java正则表达式匹配`\`
  6. 一加3支持android9吗,不忘老用户!一加3更新Android 9,网友:真的不将就
  7. Powershell ——findstr
  8. 又是一年平安夜,程序员教你用trutle画苹果,有手就行
  9. 全程pwm调光_「解疑」最近各家炒得很火的 DC 和 PWM 调光是什么鬼
  10. 聊聊Dubbo的注册中心、配置中心以及元数据中心
  11. win10查看服务器共享文件夹,Win10怎么样查看共享文件夹
  12. 统计学习之第三天(可汗学院公开课:统计学)
  13. 才发现Nero8出现了问题
  14. 4. Python基础:Python内置函数详细介绍(全)
  15. 汉洛塔 简单算法(c和python)
  16. 关于STM32H7的串口DMA的使用
  17. php 考试试题id,【模考来啦】2021年3月21日时政试题四大考点
  18. Learning to Reconstruct 3D Manhattan Wireframes from a Single Image 翻译
  19. 龙芯平台常用OS 及下载链接
  20. 全部驳回?元宇宙商标申请被国家知识产权局“劝退”

热门文章

  1. linux查看硬盘是不是ssd固态硬盘
  2. layui导出excel表格
  3. 如何关闭iOS系统自动更新?最新屏蔽升级描述文件下载
  4. 寻找雷劈数c语言,求雷劈数的来历。
  5. 开放式激光振镜+运动控制器(五):ZMC408SCAN控制器硬件介绍
  6. 幼儿园装备论文计算机网络,计算机专业毕业论文幼儿园网站的设计与维护.doc...
  7. Mac环境下创建一个cocos2dx项目
  8. 最常用的TVS管TVS管型号
  9. Python识别验证码----网易易盾推理拼图
  10. 电子商务搜索系统架构参考