opencv学习笔记--ROI与泛洪填充

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

def fill(image1):
	copyImage=image1.copy()#复制原图像
	h,w=image1.shape[:2]#读取图像的高和宽
	mask=np.zeros([h+2,w+2],np.uint8)#创建新矩阵,+2是函数需求 
	#mask一定是单通道的uint8
	cv.floodFill(copyImage,mask,(0,0),(0,255,255),(100,100,100),(150,110,150),cv.FLOODFILL_FIXED_RANGE)
	cv.imshow("tianchong",copyImage)

	
image1=cv.imread("D://2.png")
cv.imshow("yuantu",image1)
fill(image1)
cv.waitKey(0)
cv.destroyAllWindows()

官方定义为: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.填充的方法)

 floodFill(image,mask,seedPoint,newVal,rect,loDiff,upDiff,flags)

     填充区域:

    src(seed.x,seed.y)-loDiff<=src(x,y)<=src(seed.x,seed.y)+upDiff

另一种填充方式

彩色图像一般是FLOODFILL_FIXED_RANGE 指定颜色填充

还有一种是FLOODFILL_MASK_ONLY,mask的指定的位置为零时才填充,不为零不填充

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

def fill(image1):
	copyImage=image1.copy()#复制原图像
	h,w=image1.shape[:2]#读取图像的高和宽
	mask=np.zeros([h+2,w+2],np.uint8)#创建新矩阵,+2是函数需求 
	#mask一定是单通道的uint8
	cv.floodFill(copyImage,mask,(0,0),(0,255,255),(100,100,100),(150,110,150),cv.FLOODFILL_FIXED_RANGE)
	cv.imshow("tianchong",copyImage)
def fill2():
	new=np.ones([300,400,3],np.uint8)
	cv.imshow("yuan",new)
	mask=np.ones([300+2,400+2,1],np.uint8)
	mask[100:200,100:200]=0
	cv.floodFill(new,mask,(100,100),(50,50),cv.FLOODFILL_MASK_ONLY)
	cv.imshow("gai",new)

image1=cv.imread("D://2.png")
fill2()
cv.waitKey(0)
cv.destroyAllWindows()

猜你喜欢

转载自blog.csdn.net/qq_41603898/article/details/81590599