目录:

(一)ROI操作

(1)获取感兴趣区域
(2)还原操作

(二)泛洪填充floodFill

正文:

(一)ROI操作

感兴趣区(Region of Interest,ROIs) 是图像的一部分,
它通过在图像上选择或使用诸如设定阈值(thresholding) 或者从其他文件(如矢量> 转换获得等方法生成。
感趣区可以是点、线、面不规则的形状,通常用来作为图像分类的样本、掩膜、裁剪区或及其他操作。
原理通过操作图像矩阵来获取或合并指定位置的图像,
(1)获取感兴趣区域
1 src = cv.imread("./1.png")  #读取图片
2 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应
3 cv.imshow("input image",src) #通过名字将图像和窗口联系
4 print(src.shape)
5 flower = src[200:400,100:250]
6 cv.imshow("flower",flower)

(2)还原操作

 1 src = cv.imread("./1.png")  #读取图片
2 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应
3 cv.imshow("input image",src) #通过名字将图像和窗口联系
4 print(src.shape)
5 flower = src[200:400,100:250]
6 cv.imshow("flower",flower)
7 gray = cv.cvtColor(flower,cv.COLOR_BGR2GRAY) #获取一张灰度图像,单一通道
8 backface = cv.cvtColor(gray,cv.COLOR_GRAY2BGR) #单一通道转3通道
9 src[200:400,100:250] = backface
10 cv.imshow("new image",src)
11 cv.waitKey(0) #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
12 cv.destroyAllWindows() #销毁所有窗口

此时图片会失真,再如:

 1 # -*- coding=GBK -*-
2 import cv2 as cv
3 import numpy as np
4
5
6 #截取图片中的指定区域或在指定区域添加某一图片
7 def jie_image(src1):
8 src2 = src1[5:89, 500:630]#截取第5行到89行的第500列到630列的区域
9 cv.imshow("截取", src2)
10 src1[105:189, 300:430] = src2#指定位置填充,大小要一样才能填充
11 cv.imshow("合成", src1)
12
13 src = cv.imread("C://1.jpg")
14 cv.imshow("原来", src)
15 jie_image(src)
16 cv.waitKey(0)
17 cv.destroyAllWindows()

(二)泛洪填充floodFill

1 def floodFill(image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None): # real signature unknown; restored from __doc__

通俗解释:floodFill( 1.操作的图像, 2.掩模, 3.起始像素值,4.填充的颜色, 5.填充颜色的低值, 6.填充颜色的高值 ,7.填充的方法)

所谓的floodFill 漫水填充就是在一张图片中,和种子点像素相差在[-loDiff,+upDiff]的时候就用newVal来填充这个点。

1 1.操作的图像,
2 2.掩码,
3 3.起始像素值,  #我们指定的第一个点的三个通道值
4 4.填充的颜色,
5 5.填充颜色的低值,   #低值三通道
6 6.填充颜色的高值 ,  #高值三通道
7 7.填充的方法

1 参数5.填充颜色的低值就是:参数3的三通道值 减去 参数5

2 参数6.填充颜色的高值就是:参数3的三通道值 加上 参数6

1 7.填充的方法

2 彩色图像一般是FLOODFILL_FIXED_RANGE 指定颜色填充

4 还有一种是FLOODFILL_MASK_ONLY,mask的指定的位置为零时才填充,不为零不填充

(1)彩色图片

1 def fill_color_demo(image):
2 copyImg = image.copy()
3 h, w = image.shape[:2]
4 mask = np.zeros([h+2, w+2], np.uint8)
5 cv.floodFill(copyImg, mask, (30, 30), (0, 255, 255), (100, 100, 100), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)
6 cv.imshow("fill_color_demo", copyImg)

(2)二进制图片

FLOODFILL_MASK_ONLY我们可以自定义填充图像,掩码为1不填充,为0进行填充

1 def fill_binary():
2 image = np.zeros([400,400,3],np.uint8)
3 image[100:300,100:300,:]=255
4 cv.imshow("fill_banary",image)
5
6 mask = np.ones([402,402,1],np.uint8)
7 mask[101:301,101:301] = 0  #这里设置需要加1--->101:301  这是我们填充的图像掩码为0
8 cv.floodFill(image,mask,(200,200),(0,255,0),cv.FLOODFILL_MASK_ONLY)  #最好写到我们填充的图像中间
9 cv.imshow("fill_banary2",image)
1.操作的图像,
2.掩码, 为1不填充,为0才进行填充
3.填充图像的中央部分
4.填充的颜色,
5.填充的方法

参考:

https://www.cnblogs.com/ssyfj/p/9261056.html

python实现图片的ROI(region of interest)和泛洪填充的更多相关文章

  1. [python+opencv] ROI(Range Of Interest)与泛洪填充

    python+opencv3.3视频教学 基础入门笔记(贾志刚老师) https://www.bilibili.com/video/av24998616/?p=8 ROI(Range Of Inter ...

  2. Python提取图片的ROI

    图像处理经常需要提取图片的ROI,本文使用Python提取图片的ROI. 使用的Module是PIL (Pillow),一个图像处理库,用到的函数为类 Image 中的 crop 方法. 函数原型为: ...

  3. [zt] ROI (Region of Interest) 感兴趣区域 OpenCV

    在以前介绍IplImage结构的时候,有一个重要的参数——ROI.ROI全称是”Region Of Interest”,即感兴趣的区域.实际上,它是IPL/IPP(这两个是Inter的库)结构IplR ...

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

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

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

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

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

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

  7. python 读取图片的尺寸、分辨率

    #需要安装PIL模块 #encoding=gbk#--------------------------------------------------------------------------- ...

  8. ROI(Region of Interesting)

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

  9. 如何用python裁剪图片

    如何使用python裁剪图片 如上图所示,这是一张包含了各类象棋棋子的图片.我们需要将其中每一个棋子都裁剪出来,此时可以利用python的 PIL库 实现. 一. 安装PIL库 如果此前没有安装过PI ...

随机推荐

  1. 多图详解万星 Restful 框架原理与实现

    rest框架概览 我们先通过 go-zero 自带的命令行工具 goctl 来生成一个 api service,其 main 函数如下: func main() { flag.Parse() var ...

  2. C++核心编程 2 引用

    引用的基本使用 作用:给变量起别名 ,语法:数据类型 & 别名 = 原名 注意:引用必须初始化,且初始化之后,就不可更改. 引用做函数参数 作用:函数传参时,可以利用引用的技术让形参修饰实参 ...

  3. MySQL的详细讲解

    目录 Mysql的架构与历史 MySQL的逻辑架构 更新中---- Mysql的架构与历史 MySQL的逻辑架构 第二层的架构是所有的跨引擎的功能实现的地方,例如:存储,触发器,视图等. 第三层半酣了 ...

  4. 2021-06-27 & 2021-06-28 集训题解

    西克 题目传送门 Description Solution 跟 2021年省选A卷D2T1 一模一样,懒得讲了 不过这个题似乎有点卡空间,所以卡不过去 Code #include <bits/s ...

  5. 基于TLS证书手动部署kubernetes集群

      一.简介 Kubernetes是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernetes也叫K8S. K8S是Google内部一个叫Borg的容器集群管理系统 ...

  6. C# 三种方式实现Socket数据接收(经典)

    Stream.Read 方法 当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数. 语法: public abstract int Read(byte[] buffer, in ...

  7. repartition导致的广播失败,关于错误Failed to get broadcast_544_piece0 of broadcast_544

    今天一个生产环境任务出现了性能问题,,经过仔细检查发现是在一个join操作时,原设定广播右表数据广播失败,导致后续步骤进行缓慢,,报错信息 java.io.IOException: org.apach ...

  8. Java版人脸检测详解下篇:编码

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. Noip模拟13 2021.7.13:再刚题,就剁手&&生日祭

    T1 工业题 这波行列看反就非常尴尬.....口糊出所有正解想到的唯独行列看反全盘炸列(因为和T1斗智斗勇两个半小时...) 这题就是肯定是个O(n+m)的,那就往哪里想,a,b和前面的系数分开求,前 ...

  10. Noip模拟31 2021.8.5

    T1 Game 当时先胡了一发$\textit{Next Permutation}$... 然后想正解,只想到贪心能求最大得分,然后就不会了.. 然后就甩个二十分的走了... 正解的最大得分(叫它$k ...