OpenCV——ROI获取与泛洪填充

import numpy as np
import cv2 as cv


def fill_image(image):
    # 对彩色图片进行泛洪填充
    image_copy = image.copy()
    h, w, ch = image.shape
    # 注意这里一定只能是h+2, w+2
    mask = np.zeros([h+2, w+2], np.uint8)
    # API为cv.floodFill
    """
    src:需要进行填充的图片
    mask:遮罩
    seed_point:指定填充起点,类似于我们常使用的“填充工具”的鼠标点击点
    newVal:填充值,这里为白色
    loDiff:即seedpoint处的像素减去该值得到填充下边界
    upDiff:即seedpoint处的像素加上该值得到填充上边界
    flag:指定填充方式,包括:cv.FLOODFILL_FIXED_RANGE(固定范围内填充, 配合参数loDiff与upDiff)
                            cv.FLOODFILL_MASK_ONLY(只填充遮罩范围内)
    """
    cv.floodFill(image_copy, mask, seedPoint=(300, 300), newVal=(255, 255, 255),
                 loDiff=(75, 75, 75), upDiff=(75, 75, 75), flags=cv.FLOODFILL_FIXED_RANGE)
    cv.imshow("changed", image_copy)


def fill_binary():
    # 进行二值填充
    image = np.zeros([400, 400, 3], dtype=np.uint8)
    image[100:300, 100:300, :] = 255
    cv.imshow("before", image)

    mask = np.ones([402, 402, 1], dtype=np.uint8)
    mask[101:301, 101:301] = 0

    # 注意:这里如果你用了 flags=cv.FLOODFILL_MASK_ONLY 就填充不了...
    cv.floodFill(image, mask, (200, 200), (193, 182, 255), cv.FLOODFILL_MASK_ONLY)
    cv.imshow("binary", image)


src = cv.imread("data/lena.jpg")

# ROI
# face = src[150:400, 150:400, :]
# gray_face = cv.cvtColor(face, cv.COLOR_BGR2GRAY)
# back_face = cv.cvtColor(gray_face, cv.COLOR_GRAY2BGR)
# src[150:450, 150:450, :] = back_face
# cv.imshow("gray_face", gray_face)
# cv.imshow("lena", src)

# fill_image(src)
fill_binary()


cv.waitKey(0)
cv.destroyAllWindows()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值