python + opencv 图像处理(七)——ROI与泛洪填充

ROI (Regiom of Interest)是指图像中的一个矩形区域,可在该区域对其进行操作,而不会作用到整个图中。比如人脸识别…
泛洪填充(Flood Fill)通常泛洪填充需要从一个点开始,这个点可以随机选择的一点,但是一定要在填充区域内部,然后它就会进行四领域或者把整个领域寻找对周围像素完成填充。

from cv2 import cv2 as cv		#导入opencv
import numpy as np		#导入numpy

def fill_color_demo(image):
    copyImg = image.copy()
    h,w = image.shape[:2]
    mask = np.zeros([h+2,w+2],np.uint8)  # opencv 要求是uint8位
    
    '''
    通俗解释:floodFill( 1.操作的图像, 2.掩模, 3.起始像素值,4.填充的颜色, 5.填充颜色的低值, 6.填充颜色的高值 ,7.填充的方法)
    参数5.填充颜色的低值就是:参数3 减去 参数5
    参数6.填充颜色的高值就是:参数3 加上 参数6
    即是这两个数值之间的色素替换为参数4的颜色

    FLOODFILL_FIXED_RANGE   颜色填充
    FLOODFILL_MASK_ONLY mask的指定的位置为零时才填充,不为零不填充
    '''
    cv.floodFill(copyImg,mask,(30,30),(0,255,255),(100,100,100),(50,50,50),cv.FLOODFILL_FIXED_RANGE)
    # 从(30,30)这个像素点开始,最低的范围是30-100,30-100,最高的是30+50,30+50,
    # 在这个范围之内的都填充为黄色
    cv.imshow('fill_color_demo',copyImg)


def fill_binary():
    image = np.zeros([400,400,3],np.uint8) # 创建图像
    image[100:300,100:300,:] = 255  # 所有的都为255
    cv.imshow('fill_binary',image)

    mask = np.ones([402,402,1],np.uint8)
    mask[101:301,101:301] = 0
    cv.floodFill(image,mask,(200,200),(0,0,255),cv.FLOODFILL_MASK_ONLY)
    # 0,0,255 是填充的颜色
    cv.imshow('fill_mask',image)
    
if __name__ == "__main__":
	filepath = "C:\\pictures\\0000.png"
	img = cv.imread(filepath)       # blue green red
	cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
	cv.imshow("input image",img)
	
	face = img[50:250,100:300]     # 选取图像中的一个区域  # 用numpy选取一个区域
	gray = cv.cvtColor(face,cv.COLOR_BGR2GRAY)   # 对这个区域进行颜色操作
	backface = cv.cvtColor(gray,cv.COLOR_GRAY2BGR)   # 将这个还原回去
	img[50:250,100:300] = backface       # 结果是新图片中的区域是改过的颜色
	cv.imshow('face',img)
	
	fill_binary()
	
	cv.waitKey(0)
	cv.destroyAllWindows()
Python使用OpenCV进行不规则多边形ROI区域提取需要以下步骤: 1. 导入所需的库 我们需要导入OpenCV库,并将其命名为cv2。 2. 读取图像 使用cv2.imread()函数读取图像。这里假设图像文件名为"image.jpg"。 3. 创建ROI多边形 定义一个包含不规则多边形顶点的列表作为ROI区域。 4. 创建掩膜 使用cv2.fillPoly()函数创建一个与图像大小相同的空白图像,作为掩膜。然后使用cv2.fillPoly()函数在掩膜上填充多边形。 5. 应用掩膜 使用cv2.bitwise_and()函数将原始图像与掩膜进行按位与操作,即只保留ROI区域。 6. 显示结果 使用cv2.imshow()函数显示提取的ROI区域。 7. 释放窗口 使用cv2.waitKey(0)等待按下任意键后,使用cv2.destroyAllWindows()函数关闭窗口。 以下是一个简单的示例代码: ```python import cv2 import numpy as np # 读取图像 image = cv2.imread('image.jpg') # 创建ROI多边形 roi_vertices = np.array([[(100, 100), (300, 100), (200, 300), (50, 200)]], dtype=np.int32) # 创建掩膜 mask = np.zeros_like(image) cv2.fillPoly(mask, roi_vertices, 255) # 应用掩膜 roi_image = cv2.bitwise_and(image, mask) # 显示结果 cv2.imshow('ROI Image', roi_image) # 释放窗口 cv2.waitKey(0) cv2.destroyAllWindows() ``` 将以上代码保存为Python脚本,运行后会显示提取的ROI区域图像。其roi_vertices是一个包含多边形顶点的列表,可以根据需要调整顶点的坐标和个数来定义不规则多边形的形状。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值