0
点赞
收藏
分享

微信扫一扫

六、ROI和泛洪填充

dsysama 2022-03-26 阅读 51

一、ROI

ROI:region of interest,即感兴趣区域。
一般主要通过numpy来获取ROI

将某区域转变为灰色图片再覆盖原图像

import cv2
import numpy as np

src = cv2.imread(r"G:\Juptyer_workspace\study\opencv\opencv3\a1.jpg")
cv2.imshow("image",src)

roi = src[0:100,0:100]
gray = cv2.cvtColor(roi,cv2.COLOR_BGR2GRAY)
back = cv2.cvtColor(gray,cv2.COLOR_GRAY2BGR)
src[0:100,0:100] = back
cv2.imshow("roi ",src)

cv2.waitKey(0)
cv2.destroyAllWindows()

效果图如下:
在这里插入图片描述

二、彩色图像的泛洪填充

cv2.floodFill(copyImg,mask,(30,30),(0,255,255),(100,100,100),(50,50,50),cv2.FLOODFILL_FIXED_RANGE)
在(30,30)处的像素值-(100,100,100)处的像素值,所得的结果为要填充的像素的最小值
在(30,30)处的像素值+(50,50,50)处的像素值,所得的结果为要填充的像素的最大值
cv2.FLOODFILL_FIXED_RANGE表示在(30,30)这个位置周围的且像素值在最大值和最小值之间的区域都填充成(0,255,255)黄色

np.zeros([h+2,w+2],np.uint8),mask的大小必须是h+2,w+2,类型是uint8,这是OpenCV的规定。

import cv2
import numpy as np


def fill_color(image):
    copyImg = image.copy()
    h,w=image.shape[:2]
    mask = np.zeros([h+2,w+2],np.uint8)
    cv2.floodFill(copyImg,mask,(30,30),(0,255,255),(100,100,100),(50,50,50),cv2.FLOODFILL_FIXED_RANGE)
    cv2.imshow("fill_color",copyImg)
    
    
src = cv2.imread(r"G:\Juptyer_workspace\study\opencv\opencv3\a1.jpg")
cv2.imshow("image",src)
fill_color(src)


cv2.waitKey(0)
cv2.destroyAllWindows()

效果图如下:
在这里插入图片描述

三、二值图像的泛洪填充

先创建一个全为0的400 * 400的黑色图像 , 取100 : 200 , 100 : 200 该区域赋值为255,白色。黑色背景有白色方块
创建402*402的掩膜全为1的图像,取101:201,101:201区域为0,黑色
想填充的区域设置为0,mask区域设置为1

cv2.floodFill(image,mask,(150,150),(0,0,255),cv2.FLOODFILL_MASK_ONLY)
将(150,150)周围的像素点相等的像素区域被(0,0,255)红色给填充

import cv2
import numpy as np


def fill_binary():
    image = np.zeros([400,400,3],np.uint8)
    image[100:200,100:200,:] = 255
    cv2.imshow("fill_binary_image",image)
    
    mask = np.ones([402,402],np.uint8)
    mask[101:201,101:201] = 0
    
    cv2.floodFill(image,mask,(150,150),(0,0,255),cv2.FLOODFILL_MASK_ONLY)
    cv2.imshow("fill_binary_mask",image)
    
fill_binary()

cv2.waitKey(0)
cv2.destroyAllWindows()

效果图如下:
在这里插入图片描述

举报

相关推荐

0 条评论