floodFill填充函數函數(六)


 

一 函數原型

參數解釋:

  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的顏色

 

效果展示

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM