一 函數原型
參數解釋:
image 【輸入/輸出】1或者3通道、 8bit或者浮點圖像。僅當參數flags的FLOODFILL_MASK_ONLY標志位被設置時image不會被修改,否則會被修改。
mask 【輸入/輸出】 操作掩碼,必須為單通道、8bit,且比image寬2個像素、高2個像素。使用前必須先初始化。Flood-filling無法跨越mask中的非0像素。例如,一個邊緣檢測的結果可以作為mask來阻止邊緣填充。在輸出中,mask中與image中填充像素對應的像素點被設置為1,或者flags標志位中設置的值(詳見flags標志位的解釋)。此外,該函數還用1填充了mask的邊緣來簡化內部處理。因此,可以在多個調用中使用同一mask,以確保填充區域不會重疊。
seedPoint 起始像素點。
newVal 重繪像素區域的新的填充值(顏色)。
rect 可選輸出參數,返回重繪區域的最小綁定矩形。
loDiff 當前選定像素與其連通區中相鄰像素中的一個像素,或者與加入該連通區的一個seedPoint像素,二者之間的最大下行差異值。
upDiff 當前選定像素與其連通區中相鄰像素中的一個像素,或者與加入該連通區的一個seedPoint像素,二者之間的最大上行差異值。
flags flags標志位是一個32bit的int類型數據,其由3部分組成: 0-7bit表示鄰接性(4鄰接、8鄰接);8-15bit表示mask的填充顏色;16-31bit表示填充模式(詳見填充模式解釋)
通俗解釋:floodFill( 1.操作的圖像, 2.掩模, 3.起始像素值,4.填充的顏色, 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("define", image) cv.imwrite('define.jpg',image) # mask 的高寬比原圖多2,即h+2,w+2 mask = np.ones([202, 202, 1], np.uint8) # mask需要填充的位置的像素設置為0 mask[100:150, 100:150] = 0 #調用floodFill函數填充 (0,0,255)指定紅色填充 cv.floodFill(image, mask, (100, 100), (0, 0, 255), cv.FLOODFILL_MASK_ONLY) cv.imshow("fill2", image) cv.imwrite('fill2.jpg',image) fill2_image() cv.waitKey(0) cv.destroyAllWindows()
填充原理圖

三 指定顏色填充代碼
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) #(0,80) 起始點,(0,100,255) 藍色 ,(100,100,50)棕色 ,(50,50,50) 淺黑 cv.floodFill(copyImage,mask,(0,80),(0,100,255),(100,100,50),(50,50,50),cv.FLOODFILL_FIXED_RANGE) cv.imshow('fill',copyImage) src=cv.imread('./hua.jpg') cv.imshow('before',src) fill_image(src) cv.waitKey(0) cv.destroyAllWindows()
通俗解釋:floodFill( 1.操作的圖像, 2.掩模, 3.起始像素值,4.填充的顏色, 5.填充顏色的低值, 6.填充顏色的高值 ,7.填充的方法)
參數5.填充顏色的低值就是:參數3 減去 參數5
參數6.填充顏色的高值就是:參數3 加上 參數6
即是這兩個數值之間的色素替換為參數4的顏色
效果展示


