Open CV系列学习笔记(五)Roi与泛洪填充 2021-01-30

本文介绍了OpenCV中的ROI(感兴趣区域)概念及其在图像处理中的应用,通过圈定图像的特定区域进行后续处理,提高效率和精度。接着详细讲解了泛洪填充(FloodFill)算法,包括其在彩色图像和二值图像中的填充实例,展示了如何利用此算法进行图像填充和着色。最后提供了实际的Python代码示例,演示了如何在OpenCV中实现泛洪填充功能。
摘要由CSDN通过智能技术生成

Open CV系列学习笔记(五)Roi与泛洪填充

一丶Roi

1.什么是Roi

ROI(region of interest),感兴趣区域。机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。在Halcon、OpenCV、Matlab等机器视觉软件上常用到各种算子(Operator)和函数来求得感兴趣区域ROI,并进行图像的下一步处理。
在图像处理领域,感兴趣区域(ROI) 是从图像中选择的一个图像区域,这个区域是你的图像分析所关注的重点。圈定该区域以便进行进一步处理。使用ROI圈定你想读的目标,可以减少处理时间,增加精度。
在这里插入图片描述
首先将我们感兴趣的区域也就是,薇尔莉特的脸给输出。
然后们我可以对我们感兴趣的区域,做一些处理反映到原图上去在这里插入图片描述
这就是Roi操作,怎么样是不是很神奇!
这就是Roi操作,怎么样是不是很神奇。

二丶泛洪填充

泛洪填充(Flood Fill)很多时候国内的开发者称它为漫水填充,该算法在图形填充与着色应用程序比较常见,属于标配。在图像处理里对二值图像的Hole可以通过泛洪填充来消除,这个是泛洪填充在图像处理中很经典的一个用途,此外还可以通过泛洪填充为ROI区域着色。这个在图像处理也经常用到。让我们首先看一下泛洪填充算法本身,然后再说一下在图像处理中的应用场景。
泛洪填充,如何填充一个对象内部区域

  • FLOODFILL_FIXED_RANGE – 改变图像,泛洪填充
  • FLOODFILL_MASK_ONLY – 不改变图像、只填充遮
    罩层本身、忽略新的颜色值参数
    floodFill(Mat image, Mat mask, Point seedPoint,
    Scalar newVal)
    floodFill(image, mask, seedPoint, newVal, rect,
    loDiff, upDiff, flags)
    src(seed.x, seed.y)- loDiff <= src(x,y) <=
    src(seed.x, seed.y)+ upDiff(注意对高低值的选取

1.彩色图像的填充

代码:

def fill_color_demo(image):#彩色图像泛洪填充
    copyImg = image.copy()
    h,w = image.shape[:2]
    mask = np.zeros([h+2,w+2],np.uint8)
    cv.floodFill(copyImg,mask,(30,30),(0,255,255),(100,100,100),(50,50,50),cv.FLOODFILL_FIXED_RANGE)
    cv.imshow("fill_color_demo",copyImg)

运行结果:
通过修改填充cv.floodFill(copyImg,mask,(30,30),(0,255,255),(100,100,100),(50,50,50),cv.FLOODFILL_FIXED_RANGE)数据获得不同颜色的填充.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.二值图像的填充

代码:

def fill_binary():#二值图像泛洪填充
    image = np.zeros([400,400,3],np.uint8)
    image[100:300,100:300,:] = 255
    h,w = image.shape[:2]
    cv.imshow("fill_binary",image)

结果:
在这里插入图片描述

def fill_binary():#二值图像泛洪填充
    image = np.zeros([400,400,3],np.uint8)
    image[100:300,100:300,:] = 255
    h,w = image.shape[:2]
    cv.imshow("fill_binary",image)

    mask = np.ones([402,402,1],np.uint8)
    mask[101:301,101:301] = 0
    cv.floodFill(image,mask,(200,200),(100,8,255),cv.FLOODFILL_MASK_ONLY)
    cv.imshow("filled binary",image)

结果:(也可自行填充喜欢的颜色)在这里插入图片描述
完整代码:`

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)
    cv.floodFill(copyImg,mask,(30,30),(0,255,255),(100,100,100),(50,50,50),cv.FLOODFILL_FIXED_RANGE)
    cv.imshow("fill_color_demo",copyImg)


def fill_binary():#二值图像泛洪填充
    image = np.zeros([400,400,3],np.uint8)
    image[100:300,100:300,:] = 255
    h,w = image.shape[:2]
    cv.imshow("fill_binary",image)

    mask = np.ones([402,402,1],np.uint8)
    mask[101:301,101:301] = 0
    cv.floodFill(image,mask,(200,200),(100,8,255),cv.FLOODFILL_MASK_ONLY)
    cv.imshow("filled binary",image)


print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("E:/picture/10.bmp")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
"""
face = src[120:465,150:500]
gray = cv.cvtColor(face,cv.COLOR_BGR2GRAY)
backface = cv.cvtColor(gray,cv.COLOR_GRAY2BGR)
src[120:465,150:500] = backface
cv.imshow("face",src)"""
#fill_color_demo(src)
fill_binary()

cv.waitKey(0)

cv.destroyAllWindows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值