1. 程式人生 > >python實現opencv學習十:floodFill填充函式函式

python實現opencv學習十:floodFill填充函式函式

指定顏色填充:

程式碼如下:

# -*- coding=GBK -*-
import cv2 as cv
import numpy as np


#指定顏色替換
def fill_image(image):
    copyImage = image.copy()#複製原影象
    h, w = image.shape[:2]#讀取影象的寬和高
    mask = np.zeros([h+2, w+2], np.uint8)#新建影象矩陣  +2是官方函式要求
    cv.floodFill(copyImage, mask, (0, 80), (0, 100, 255), (100, 100, 50), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)
    cv.imshow("填充", copyImage)

src = cv.imread("C://1.jpg")
cv.imshow("原來", src)
fill_image(src)
cv.waitKey(0)
cv.destroyAllWindows()

執行結果:


說明如下:

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

官方定義為:floodFill(InputOutputArray image, Point seedPoint, Scalar newVal, Rect* rect=0, Scalar loDiff=Scalar(), Scalar upDiff=Scalar(), int flags=4 ) 

不知道為啥,python中呼叫這個函式,Rect* rect=0這個引數沒有,剩下7個引數 

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

視訊講解如下:

引數5.填充顏色的低值就是:引數3 減去 引數5

引數6.填充顏色的高值就是:引數3 加上 引數6

即是這兩個數值之間的色素替換為引數4的顏色

疑問就是:引數3,5,6的個數都不一樣,不太懂怎麼減去的? 以後知道了再補充!

7.填充的方法

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

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

函式操作如下:

#指定位置填充
def fill2_image():
    image = np.zeros([200, 200, 3], np.uint8)
    #image[100:300, 100:300, :] = 255
    cv.imshow("原圖", image)
    mask = np.ones([202, 202, 1], np.uint8)
    mask[100:150, 100:150] = 0
    cv.floodFill(image, mask, (100, 100), (0, 0, 255), cv.FLOODFILL_MASK_ONLY)
    cv.imshow("填充2", image)

呼叫函式輸出如下: