python實現opencv學習十:floodFill填充函式函式
阿新 • • 發佈:2019-02-15
指定顏色填充:
程式碼如下:
# -*- 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)
呼叫函式輸出如下: