opencv基础入门——ROI与泛洪填充

参考教程:

  • python+opencv3.3视频教学 基础入门-bilibili
  • Python+OpenCV图像处理(六)—— ROI与泛洪填充 - 蛋片鸡 - 博客园
  • 图像处理之泛洪填充算法(Flood Fill Algorithm)-CSDN博客

一、ROI

1.定义

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

2.代码

import cv2 as cv

if __name__ == "__main__":
    src = cv.imread('cat.jpg')
    # 指定ROI
    face = src[0:250, 150:400]
    # 单独写出ROI区域
    cv.imwrite("catface.png",face)
    # 对ROI区域单独处理
    grey = cv.cvtColor(face, cv.COLOR_BGR2GRAY)
    backface = cv.cvtColor(grey, cv.COLOR_GRAY2BGR)
    src[0:250, 150:400] = backface
    cv.imwrite("backface.png",src)

结果:
opencv基础入门——ROI与泛洪填充_第1张图片

二、泛洪填充

1.定义

泛洪填充:又称洪水填充,是在很多图形绘制软件中常用的填充算法,最熟悉就是windows paint的油漆桶功能。
实现的原理很简单,就是从一个点开始将附近像素点填充成新的颜色,直到封闭区域内的所有像素点都被填充新颜色为止。

2.彩色泛洪填充

  • 泛洪填充函数
    floodFill(image, mask, seedPoint, newVal, rect, loDiff, upDiff, cv.FLOODFILL_FIXED_RANGE)
  • 会改变图像
def fill_color_demo(image):
    """
    彩色泛洪填充
    - - - -
    image - 原图像
    """
    copyimg = image.copy()
    h, w = image.shape[:2]
    # "+2"应该是工程化处理,不用深究
    mask = np.zeros([h+2,w+2],np.uint8)
    # floodFill()泛洪填充函数:
    # (30, 30)为起始点, (0, 255, 255)为填充颜色, (50, 50, 50)为填充颜色下降范围, (50,50,50)为填充颜色上升范围
    cv.floodFill(copyimg, mask, (30, 30), (0, 255, 255), (50, 50, 50), (50,50,50), cv.FLOODFILL_FIXED_RANGE)
    cv.imwrite("fill.png", copyimg)

if __name__ == "__main__":
    src = cv.imread('cat.jpg')
    fill_color_demo(src)

结果:
opencv基础入门——ROI与泛洪填充_第2张图片

3.二值图像泛洪填充

  • 泛洪填充函数floodFill(image, mask, seedPoint, newVal)
  • 不改变图像,只填充遮罩层本身
def fill_binary():
    """
    二值图像泛洪填充
    """
    image = np.zeros([400, 400, 3], np.uint8)
    image[100:300, 100:300, :] = 255
    # 导出新创建图像
    cv.imwrite("init.png", image)
    # 创建mask:注意此处为ones
    mask = np.ones([402,402],np.uint8)
    mask[101:301, 101:301] = 0
    # floodFill()泛洪填充函数:
    # (200, 200)为起始点, (0, 255, 255)为填充颜色
    cv.floodFill(image,mask, (200, 200), (0, 255, 255), cv.FLOODFILL_MASK_ONLY)
    cv.imwrite("fill2.png", image)

if __name__ == "__main__":
    src = cv.imread('cat.jpg')
    fill_binary()

结果:
opencv基础入门——ROI与泛洪填充_第3张图片

你可能感兴趣的:(可视化,opencv,计算机视觉,cv,python)