1. 程式人生 > >opencv學習(八):floodFill填充函式

opencv學習(八):floodFill填充函式

一、指定顏色填充:

(1)程式碼如下:

#匯入cv模組
import cv2 as cv
import numpy as np

#泛洪填充

def fill_color_demo(image):   #彩色圖片的填充
    copyImg=image.copy()
    h,w=image.shape[:2]
    mask=np.zeros([h+2,w+2],np.uint8)
    cv.floodFill(copyImg,mask,(30,30),(0,255,2555),(100,100,100),(50,50,50),cv.FLOODFILL_FIXED_RANGE)
    cv.imshow("fill_color_demo",copyImg)

print("------------Hi,Python!-------------")
# 讀取影象,支援 bmp、jpg、png、tiff 等常用格式
src = cv.imread("F:/Projects/images/2.jpg")
#建立視窗並顯示影象
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)   #顯示原圖
fill_color_demo(src)

cv.waitKey(0)
#釋放視窗
cv.destroyAllWindows()

(2)效果:

(3)說明

        floodFill函式:漫水填充演算法:我覺得叫顏色替換好一些

   官方函式原型:floodFill(image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None):

        通俗解釋:floodFill( 1.操作的影象, 2.掩模, 3.起始畫素值,4.填充的顏色, 5.填充顏色的低值, 6.填充顏色的高值 ,7.填充的方法)

(4)填充的方法

        彩色影象一般是FLOODFILL_FIXED_RANGE 指定顏色填充

        還有一種是FLOODFILL_MASK_ONLY,mask的指定的位置為零時才填充,不為零不填充

       函式操作如下:

#匯入cv模組
import cv2 as cv
import numpy as np


def fill_binary():   #二值填充
    image=np.zeros([400,400,3],np.uint8)
    image[101:301,101:301,:2]=0
    cv.imshow("fill_binary",image)

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





print("------------Hi,Python!-------------")
# 讀取影象,支援 bmp、jpg、png、tiff 等常用格式
src = cv.imread("F:/Projects/images/2.jpg")
#建立視窗並顯示影象
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)   #顯示原圖
fill_binary()
"""
face=src[50:150,30:140]
gray=cv.cvtColor(face,cv.COLOR_BGR2GRAY)#轉為灰度圖片
backface=cv.cvtColor(gray,cv.COLOR_GRAY2BGR)#轉為RGB
src[50:150,30:140]=backface
cv.imshow("face",src)
"""
cv.waitKey(0)
#釋放視窗
cv.destroyAllWindows()

        效果: