Python-OpenCV 图像处理(五):ROI与泛洪填充

import cv2
import numpy as np

__author__ = "zxsuperstar"
__email__ = "[email protected]"


"""
cv2.floodFill(img,mask,seed,newvalue(BGR),(loDiff1,loDiff2,loDiff3),(upDiff1,upDiff2,upDiff3),flag)

img:为待使用泛洪算法的图像
mask:为掩码层,使用掩码可以规定是在哪个区域使用该算法,如果是对于完整图像都要使用,
    则掩码层大小为原图行数+2,列数+2.是一个二维的0矩阵,边缘一圈会在使用算法是置为1。
    而只有对于掩码层上对应为0的位置才能泛洪,所以掩码层初始化为0矩阵。【dtype:np.uint8】
seed:为泛洪算法的种子点,也是根据该点的像素判断决定和其相近颜色的像素点,是否被泛洪处理。
newvalue:是对于泛洪区域新赋的值(B,G,R)
(loDiff1,loDiff2,loDiff3):是相对于seed种子点像素可以往下的像素值,即seed(B0,G0,R0),
                            泛洪区域下界为(B0-loDiff1,G0-loDiff2,R0-loDiff3)
(upDiff1,upDiff2,upDiff3):是相对于seed种子点像素可以往上的像素值,
                            即seed(B0,G0,R0),泛洪区域上界为(B0+upDiff1,G0+upDiff2,R0+upDiff3)
flag:为泛洪算法的处理模式。
"""

def fill_color_demo(image):
    copyimg = image.copy()
    h,w = image.shape[:2]
    # mask必须行和列都加2,且必须为uint8单通道阵列
    mask = np.zeros([h+2,w+2],np.uint8)
    cv2.floodFill(copyimg,mask,(30,30),(0,255,255),(100,100,100),(50,50,50),cv2.FLOODFILL_FIXED_RANGE)
    cv2.imshow("floodfill",copyimg)


def fill_binary(image):
    image = np.zeros([400,400,3],np.uint8)
    image[100:300,100:300,:] =255
    cv2.imshow("floodfill1",image)

    mask = np.ones([402,402,1],np.uint8)
    mask[101:301,101:301] =0
    cv2.floodFill(image,mask,(200,200),(0,0,255),cv2.FLOODFILL_MASK_ONLY)
    cv2.imshow("floodfill2", image)


src = cv2.imread("t.jpg") #blue green red
cv2.namedWindow("image", cv2.WINDOW_AUTOSIZE)
cv2.imshow("image",src)


if __name__ == "__main__":
    # face = src[100:260,250:400]
    # gray = cv2.cvtColor(face,cv2.COLOR_BGR2GRAY)
    # cv2.imshow("gray",gray)
    # backface = cv2.cvtColor(gray,cv2.COLOR_GRAY2BGR)
    # cv2.imshow("backface",backface)
    # cv2.imshow("face",face)
    # fill_color_demo(src)
    fill_binary(src)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

猜你喜欢

转载自blog.csdn.net/zx_good_night/article/details/88638806