Python + OpenCV 学习笔记(七)>>> ROI 与泛洪填充

版权声明:如需转载请标注 https://blog.csdn.net/weixin_40973138/article/details/84525002

ROI

ROI 即感兴趣区域(region of interest)
仅对图片中ROI 进行操作

def ROI(m1):
	src = cv.cvtColor(m1[50:100, 150:250], cv.COLOR_BGR2GRAY)       #此时src 虽为灰度图,但其为单通道
	gray = cv.cvtColor(m1[50:100, 150:250], cv.COLOR_GRAY2BGR)      #将其转变成三通道
	m1[50:100, 150:250] = gray
	cv.imshow(m1)

在这里插入图片描述

泛洪填充

泛洪填充就是选取一点,然后基于该点根据设定的上下限向四周扩散扫描,当扫描到的点位于该范围内,即将该点填充为设定的目标颜色,否则不变。

def fill_image(image):
	copyImage = image.copy()
	h, w = copyImage.shape[:2]
	mask = np.zeros[h+2, w+2, np.unit8]
	cv.floodFill(copyImage, mask, (250,250), (10,10,10), (20,20,20), (20,20,20), cv.FLOODFILL_FIXED_RANGE)
	cv.imshow('result', copyImage)

然后运行:

src = cv.imread('/home/pi/Desktop/apple.jpg')
fill_image(src)

输出结果:
在这里插入图片描述
掩模之所以要设置为(h+2, w+2) 的尺寸是因为要确保覆盖整个图像

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

参数 说明
image 要进行处理的图像
mask 掩模
seedPoint 起始扫描点
newVal 要填充进去的颜色
loDiff 扫描时减去的低值
upDiff 扫描时增加的高值
flags 填充方式

二值填充

通过限定mask中像素值为0的区域来规定填充区域
mask的指定的位置为零时才填充,不为零不填充

def fill_image_2(image):
        copyImage = image.copy()
        h, w = copyImage.shape[:2]
        mask = np.ones([h+2, w+2, 1], np.uint8)
        mask[50:400, 50:400] = 0
        cv.floodFill(copyImage, mask, (100,100), (0,0,255), cv.FLOODFILL_MASK_ONLY)
        cv.imshow('result2', copyImage)

结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40973138/article/details/84525002