opencv(3)-floodFill函式填充,兩種形式
阿新 • • 發佈:2018-12-14
第一種:聯通方式為,CV_FLOODFILL_FIXED_RANGE,彩色填充
# -*- coding=GBK -*- import cv2 import numpy as np def fill_image(image): copy_image = image.copy() # 複製原影象 height,width = image.shape[:2] mask = np.zeros([height+2,width+2],np.uint8) # 官方要求,掩模 # 1 img 2 掩模 3 起始畫素值 4 填充顏色 5 填充顏色的低閾值(3起始畫素值-x) 6 高閾值(+x) 7 填充顏色的方法 cv2.floodFill(copy_image,mask,(0,80),(0, 100, 255), (100, 100, 50), (50, 50, 50),cv2.FLOODFILL_FIXED_RANGE) cv2.imshow('填充',copy_image) src = cv2.imread('dog.jpg',1) cv2.imshow('src',src) fill_image(src) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.floodFill
引數分別為:源圖
,掩碼
,起始填充標記點
,填充色
,最大低亮度之間的差異
,最大高亮度之間的差異
,聯通方式
。
掩碼影象
,大小比原圖多兩個畫素點。設輸入影象大小為w h ,則掩碼的大小必須為 (w + 2) (h + 2) , mask可為輸出,也可作為輸入 ,由flags決定。起始填充標記點
,從這個點開始往外擴散執行填充。連通方式
:0~7位為0x04或者0x08 即 4連通 或者 8連通,
8~15位為填充mask的值大小 , 若為0 , 則預設用1填充
16~23位為CV_FLOODFILL_FIXED_RANGE =(1 << 16)
,CV_FLOODFILL_MASK_ONLY =(1 << 17)
flags引數通過位與運算處理:
- 當為CV_FLOODFILL_FIXED_RANGE 待處理的畫素點與種子點作比較,如果∈(s – lodiff , s + updiff),s為種子點畫素值,則填充此畫素。若無此位設定,則將待處理點與已填充的相鄰點作此比較。
- 當為CV_FLOODFILL_MASK_ONLY 此位設定填充的對像, 若設定此位,則mask不能為空,此時,函式不填充原始影象img,而是填充掩碼影象. 若無此位設定,則在填充原始影象的時候,也用flags的8~15位標記對應位置的mask.
第二種,聯通方式為CV_FLOODFILL_MASK_ONLY
mask的指定的位置為零時才填充,不為零不填充
# -*- coding=GBK -*-
import cv2
import numpy as np
def fill2_image():
image = np.zeros([400,400,3],np.uint8)# 造一張圖
image[200:300,200:300] = 255
cv2.imshow('src',image) # 輸出原圖
height,width = image.shape[:2]
mask = np.ones([height+2,width+2,1],np.uint8) # mask模板初始化為1
mask[201:301,201:301] = 0 # 想填充的區域初始化為0
cv2.floodFill(image,mask,(200,200),(0,0,255),cv2.FLOODFILL_MASK_ONLY)
cv2.imshow('dst',image)
fill2_image()
cv2.waitKey(0)
cv2.destroyAllWindows()