【OpenCV】基本操作 ROI & 泛洪

本文是OpenCV教程的第八课,讲解了如何使用ROI(感兴趣区域)进行图像处理,以及如何实现泛洪填充算法。通过实例展示了如何选取图像的ROI并用灰度图替换,以及如何使用floodFill函数进行图像填充。这两个概念是图像处理中的基本操作,对于图像分析和编辑非常有用。
摘要由CSDN通过智能技术生成

【OpenCV】高手勿入! 半小时学会基本操作 8

概述

OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. (第 8 课)

在这里插入图片描述

ROI

ROI (Region of Interest) 即感兴趣区域, 就是在图像中分析的重点.

在这里插入图片描述

例子:

import cv2

# 读取图片
img = cv2.imread("girl3.jpg")

# ROI
face = img[100:750, 1000:1600]

# 获取灰度图
face_gray = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY)
face_gray = cv2.cvtColor(face_gray, cv2.COLOR_GRAY2BGR)

# 用灰度图替换脸
img[100:750, 1000:1600] = face_gray

# 图片展示
cv2.imshow("ROI", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 保存图片
cv2.imwrite("ROI.jpg", img)

输出结果:

在这里插入图片描述

泛洪填充

泛洪填充算法 (Flood Fill Algorithm), 是从一个点开始附近的像素点填充成新的颜色, 直到封闭区内所有的像素点都被填充新颜色为止.

在这里插入图片描述

格式:

cv2.floodFill(image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None)

参数:

  • image: 输入图片
  • mask: 掩码, 比 image 长宽高 2
  • seedPoint: 泛洪算法的起始点
  • newVal: 重绘区域的新值 (颜色)
  • loDiff: seePoint - loDiff 下限
  • upDiff: seePoint - upDiff 上限
  • flags: 操作标志符
    • LOODFILL_FIXED_RANGE: 改变图像, 泛洪填充
    • FLOODFILL_MASK_ONLY: 不改变图像, 只填充 mask 本身, 忽略新的颜色值参数

例 1:

import numpy as np
import cv2


def flood_fill(image):
    """泛洪"""

    # 深拷贝
    image_copy = image.copy()

    # 获取高宽
    h, w = image.shape[:2]

    # 获取mask
    mask = np.zeros([h + 2, w + 2], np.uint8)

    # 泛洪
    cv2.floodFill(image_copy, mask, (1000, 200), (0, 255, 0), (30, 30, 30), (50, 50, 50), cv2.FLOODFILL_FIXED_RANGE)

    # 图片展示
    cv2.imshow("flood_fill", image_copy)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    # 返回
    return image_copy


if __name__ == "__main__":
    # 读取图片
    img = cv2.imread("girl3.jpg")

    # 获取泛洪图像
    flood_fill = flood_fill(img)

    # 保存图片
    cv2.imwrite("flood_fill.jpg", flood_fill)

输出结果:

在这里插入图片描述
例 2:

import numpy as np
import cv2


def flood_fill():
    """泛洪"""

    # 获取图片
    image = np.zeros([400, 400, 3], np.uint8)

    # 获取mask
    mask = np.ones([400 + 2, 400 + 2, 1], np.uint8)
    mask[101:301, 101:301] = 0

    # 泛洪
    cv2.floodFill(image, mask, (200, 200), (100, 2, 255), cv2.FLOODFILL_MASK_ONLY)

    # 图片展示
    cv2.imshow("flood_fill", image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    # 返回
    return image


if __name__ == "__main__":
    # 读取图片
    img = cv2.imread("girl3.jpg")

    # 获取泛洪图像
    flood_fill = flood_fill()

    # 保存图片
    cv2.imwrite("flood_fill.jpg", flood_fill)

输出结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值