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()
OpenCV——ROI获取与泛洪填充
最新推荐文章于 2023-12-28 23:11:33 发布