ROI(Range Of Interest)与泛洪填充

python+opencv3.3视频教学 基础入门笔记(贾志刚老师)

https://www.bilibili.com/video/av24998616/?p=8

ROI(Range Of Interest 感兴趣区域)

numpy获取ROI 指定宽高的起始结束位置

src1 = cv.imread('1.jpg')
# cv.namedWindow('src1',cv.WINDOW_AUTOSIZE)
cv.imshow('src1',src1)
face = src1[180:335 ,470:570] #row-指定高范围180px-335px width-指定宽范围470px-570px
gray = cv.cvtColor(face,cv.COLOR_BGR2GRAY)  #将face一块的图像转为灰度图(单通道)
backface = cv.cvtColor(gray,cv.COLOR_GRAY2BGR)  #再将灰度图转为BRG图(3通道)
src1[180:335 ,470:570] = backface
cv.imshow('face',src1)
print(src1.shape)

泛洪填充(漫水填充)

是一种用特定的颜色填充联通区域的方法,通过设置可连通像素的上下限以及连通方式来达到不同的填充效果的方法。

泛洪填充经常被用来标记或分离图像的一部分以便对其进行进一步处理或分析,也可以用来从输入图像获取掩码区域,掩码会加速处理过程,或只处理掩码指定的像素点,操作的结果总是某个连续的区域。

def fill_color_demo(img):
copyImg = img.copy()
h,w = copyImg.shape[:2]
#记住:遮罩mask 要在img的h w 之上加2,基于opencv扫描算法
##mask必须行和列都加2,且必须为uint8单通道阵列---当从0行0列开始泛洪填充扫描时,mask多出来的2可以保证扫描的边界上的像素都会被处理
mask = np.zeros([h+2,w+2],np.uint8)
#floodFill(image, mask, seedPoint, newVal, flags=None) #种子点(200,500)、填充颜色(0,255,255)、填充区域最低(170,320,100) 最高范围(360,580,30)
cv.floodFill(copyImg,mask,(256,256),(0,0,255),(100,100,100),(50,50,50),cv.FLOODFILL_FIXED_RANGE)
cv.imshow('fill_color_demo',copyImg)

cv.floodFill(image, mask, (430, 430), (0, 255, 255), (100, 100, 100), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)  -> retval, image, mask, rect

cv.floodFill(image, mask, (200, 200), (100, 2, 255), cv.FLOODFILL_MASK_ONLY)

以上两个函数的前三个参数:

1-image:为需要进行洪泛处理的图片;

2-mask:表示为掩图,其作用见对上述矩形的处理;

3-(430, 430)或(200, 200):表示种子数据,即选中的像素点位置;

4-(0, 255, 255)或(100, 2, 255):表示填充的颜色;

5-(100, 100, 100)与 (50, 50, 50):表示低、高的三通道范围。例如第一个函数中, (430, 430)这个位置的像素点(x,y,z),即像素范围在(x-100,y-100,z-100)到(x+50,y+50,z+50)全部被填充。

6-cv.FLOODFILL_FIXED_RANGE:泛洪填充,改变图像;

cv.FLOODFILL_MASK_ONLY:不改变图像,只填充掩遮罩本身。

def fill_binary():
image = np.zeros([400,400,3],np.uint8)
image[100:300,100:300,:] = 255  #高100-300 宽100-300 区域的3个通道BRG设置为255
cv.imshow('before_fill_binary',image) mask = np.ones([402,402,1],np.uint8)
mask[101:301,101:301] = 0
cv.floodFill(image,mask,(200,200),(0,0,255),loDiff=cv.FLOODFILL_MASK_ONLY)
cv.imshow('after_filled_binary',image)

注意:

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来填充。

[python+opencv] ROI(Range Of Interest)与泛洪填充的更多相关文章

  1. Python+OpenCV图像处理(六)—— ROI与泛洪填充

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

  2. python实现图片的ROI(region of interest)和泛洪填充

    目录: (一)ROI操作 (1)获取感兴趣区域(2)还原操作 (二)泛洪填充floodFill 正文: (一)ROI操作 感兴趣区(Region of Interest,ROIs) 是图像的一部分,它 ...

  3. 5、OpenCV Python ROI和泛洪填充

    __author__ = "WSX" import cv2 as cv import numpy as np #泛洪填充 从一个点开始 ,填充周围和他相似的点,直到遇到一个边界 # ...

  4. opencv python:ROI 与 泛洪填充

    提取ROI区域,处理然后放回去: 泛洪填充 测试代码:显示一张图像,鼠标点击之后,会从该点开始进行填充,显示填充后的结果图像 注:二值图像的填充需要使用选项:cv2.FLOODFILL_MASK_ON ...

  5. 八 ROI(region of interest)和泛洪填充

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

  6. Python+opencv打开修图的正确方式get

    先逼逼两句: 图像是 Web 应用中除文字外最普遍的媒体格式. 流行的 Web 静态图片有 JPEG.PNG.ICO.BMP 等.动态图片主要是 GIF 格式.为了节省图片传输流量,大型互联网公司还会 ...

  7. Python+opencv 图像拼接

    1.http://www.cnblogs.com/skyfsm/p/7411961.html ,给出了很好地拼接算法实现 2.由于不是Python的,所以简单做了一些翻译转成Python+opencv ...

  8. OpenCV---ROI(region of interest)和泛洪填充

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

  9. python - opencv 的一些小技巧备忘

    python - opencv 的一些小技巧备忘 使用python-opencv来处理图像时,可以像matlab一样,将一幅图像看成一个矩阵,进行矢量操作,以加快代码运行速度. 下面记录几个常用的操作 ...

随机推荐

  1. java-RAC Oracle 连接字符串

    昨天在访问oracle数据库取数据时遇到一个问题: 上网搜索一下发现是我访问的数据库做了RAC,原有的数据库连接字符串不适用,原来的连接字符串如下所示: 使用下面的字符串解决了该问题: String ...

  2. JSPatch实现原理详解<二>

    本文转载至 http://blog.cnbang.net/tech/2855/ 距离上次写的<JSPatch实现原理详解>有一个月的时间,在这段时间里 JSPatch 在不断地完善和改进, ...

  3. sql预计简单分页

    在显示记录条目时往往要用到分页,一种常用的办法是利用各种数据库自带的定位接口对原始查询语句进行改写,从而只取出特定范围的某些记录.不同的数据库,查询定位接口是不一样的,下面做一汇总: 数据库 分页查询 ...

  4. Centos6下Python3的编译安装

    本文转载自 Centos6下Python3的编译安装 系统环境:CentOS 6.8-Minimal 安装Python依赖包: 1 [root@Python src]# yum install zli ...

  5. 微信小程序源码案例大全

    微信小程序demo:足球,赛事分析 小程序简易导航 小程序demo:办公审批 小程序Demo:电魔方 小程序demo:借阅伴侣 微信小程序demo:投票 微信小程序demo:健康生活 小程序demo: ...

  6. SQL Server 索引结构及其使用(一)[转]

    SQL Server 索引结构及其使用(一) 作者:freedk 一.深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(cluster ...

  7. SVN —— 如何设置代理

    如果在使用SVN下载外网的资源时,出现这样的提示:No such host is known. 或者 不知道这样的主机,可能是机器网络的问题. 如果浏览器能够正常访问外网,那应该是网络设置了代理的问题 ...

  8. LeetCode 39 Combination Sum(满足求和等于target的所有组合)

    题目链接: https://leetcode.com/problems/combination-sum/?tab=Description   Problem: 给定数组并且给定一个target,求出所 ...

  9. TFS Build做Web应用持续集成发布的一个技巧

    由于面向接口编程的关系,许多实现往往是动态注入运行,在一个项目中直接引用实现dll编译是不合理的.通常我们会在Post Build Event中添加一些xcopy命令将运行时才需要的dll复制到输出目 ...

  10. docker 参数

    -a, --attach=[] Attach to STDIN, STDOUT or STDERR 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项 --add-host= ...