​[h+2, w+2], np.uint8 参数固定用法​​​​floodFill默认在为0的区域进行填充​

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

​将指定区域内的指定色彩范围,填充为新的颜色​​​​image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None​​​​(1.操作的图像, 2.掩模, 3.取此点的像素值, 4.填充的颜色, 5.填充颜色的低值, 6.填充颜色的高值, 7.填充的方法)​​​​低值 = 参数3对应点的像素值 - 参数5​​​​高值 = 参数3对应点的像素值 + 参数6​​​​对在低值到高值范围内的像素填充为参数4对应的颜色​

cv.floodFill(copyImg, mask, (100, 100), (180, 0, 255), (100, 100, 100), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)

cv.imshow("fill_color_demo", copyImg)
import cv2 as cv
import numpy as np


# 将图片的某块区域填充为灰色
def roi_test(src):
face = src[100:510, 200:600]
# print(face.shape) # (410, 400, 3)
gray = cv.cvtColor(face, cv.COLOR_BGR2GRAY) # 转灰度图
# print(gray.shape) # (410, 400)
# 单通道
cv.imshow("gray", gray)
back_face = cv.cvtColor(gray, cv.COLOR_GRAY2BGR)
# 同一像素点GBR值都相同
# print(back_face.shape) # (410, 400, 3)
cv.imshow("back_face", back_face)
src[100:510, 200:600] = back_face
cv.imshow("face", src)

def fill_color_demo(image):
copyImg = image.copy()
h, w = image.shape[:2]
# [h+2, w+2], np.uint8 参数固定用法
# floodFill默认在为0的区域进行填充
mask = np.zeros([h+2, w+2], np.uint8)
# 将指定区域内的指定色彩范围,填充为新的颜色
# image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None
# (1.操作的图像, 2.掩模, 3.取此点的像素值, 4.填充的颜色, 5.填充颜色的低值, 6.填充颜色的高值, 7.填充的方法)
# 低值 = 参数3对应点的像素值 - 参数5
# 高值 = 参数3对应点的像素值 + 参数6
# 对在低值到高值范围内的像素填充为参数4对应的颜色
cv.floodFill(copyImg, mask, (100, 100), (180, 0, 255), (100, 100, 100), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)
cv.imshow("fill_color_demo", copyImg)

if __name__=="__main__":
src = cv.imread("./images/CrystalLiu1.jpg")
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210128221159677.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2NDU2MDQ5,size_16,color_FFFFFF,t_70)
cv.imshow("Crystal Liu", src)

# roi_test(src)
# fill_color_demo(src)
fill_binary()

cv.waitKey(0)
cv.destroyAllWindows()

​roi_test(src)​

ROI与泛洪填充_对应点

​fill_color_demo(src)​

ROI与泛洪填充_色彩范围_02

​fill_binary()​

ROI与泛洪填充_像素点_03

# 对边界进行处理
from matplotlib import pyplot as plt

def make_border(image):
"""
:param image:输入图像
top, bottom, left, right 对应边界的像素数目。
borderType 要添加那种类型的边界,类型如下:
– cv2.BORDER_CONSTANT 添加有颜色的常数值边界,还需要 下一个参数(value)。
– cv2.BORDER_REFLECT边界元素的镜像。比如: fedcba|abcdefgh|hgfedcb
– cv2.BORDER_REFLECT_101orcv2.BORDER_DEFAULT 跟上面一样,但稍作改动。例如: gfedcb|abcdefgh|gfedcba
– cv2.BORDER_REPLICATE重复最后一个元素。例如: aaaaaa| abcdefgh|hhhhhhh
– cv2.BORDER_WRAP 不知道怎么说了, 就像这样: cdefgh| abcdefgh|abcdefg
value 边界颜色,如果边界的类型是 cv2.BORDER_CONSTANT
"""
BLUE = [255, 0, 0]

replicate = cv.copyMakeBorder(image, 10, 10, 10, 10, cv.BORDER_REPLICATE)
reflect = cv.copyMakeBorder(image, 10, 10, 10, 10, cv.BORDER_REFLECT)
reflect101 = cv.copyMakeBorder(image, 10, 10, 10, 10, cv.BORDER_REFLECT_101)
wrap = cv.copyMakeBorder(image, 10, 10, 10, 10, cv.BORDER_WRAP)
constant = cv.copyMakeBorder(image, 10, 10, 10, 10, cv.BORDER_CONSTANT, value=BLUE)

plt.subplot(231), plt.imshow(image, 'gray'), plt.title('ORIGINAL')
plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE')
plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')
plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101')
plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')
plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT')
plt.show()

ROI与泛洪填充_像素点_04