python3-opencv库(5)--ROI,泛洪填充

版权声明:转载请注明原作者及出处

import numpy as np
from cv2 import cv2 

"""ROI,ROI区域即一张图上你感兴趣的区域,可以用数组切片的方式选出图像的特定区域
对ROI区域的操作,也会反应在原图上"""

 

#========================方案一==============================
print("--------------------hello python!--------------------")
src = cv2.imread("D:/Picture/wallhaven-2712.jpg")

face = src[50:250,100:300,:] #利用numpy数组访问特定区域
#face表示50~250行,100~300列的像素值(每个像素值都是一个3通道BGR数组)
gray = cv2.cvtColor(face,cv2.COLOR_BGR2GRAY) #转化为单通道灰度图
src[50:250,100:300,0] = gray #将单通道的值赋给三通道BGR的每个通道
src[50:250,100:300,1] = gray
src[50:250,100:300,2] = gray

cv2.imshow("input window",src)
cv2.imshow("face",face)

cv2.waitKey(0)
cv2.destroyAllWindows()
import numpy as np
from cv2 import cv2 

"""ROI,ROI区域即一张图上你感兴趣的区域,可以用数组切片的方式选出图像的特定区域
对ROI区域的操作,也会反应在原图上"""

 

#=========================方案二===========================
print("--------------------hello python!--------------------")
src = cv2.imread("D:/Picture/wallhaven-2712.jpg")

face = src[50:250,100:300,:] #利用numpy数组访问特定区域
#face表示50~250行,100~300列的像素值(每个像素值都是一个3通道BGR数组)
gray = cv2.cvtColor(face,cv2.COLOR_BGR2GRAY) #转化为单通道灰度图

backface = cv2.cvtColor(gray,cv2.COLOR_GRAY2BGR)
#灰度图回到BGR图在视觉上没有任何区别,但是数据的存储方式从单通道变为三通道
src[50:250,100:300,:] = backface #将原图ROI区域变成灰色

cv2.imshow("input window",src)
cv2.imshow("face",face)

cv2.waitKey(0)
cv2.destroyAllWindows()
import numpy as np
from cv2 import cv2 


"""泛洪填充"""

def fill_color_demo(img):
    """泛洪填充,即制定图中某一像素,以该像素为基准点,设置像素值的上限与下限"""
    """所有处在上下限范围内的像素,都会被填充为指定的新颜色"""
    copying = img.copy()
    h, w = copying.shape[0:2]
    mask = np.zeros([h+2,w+2,1],dtype=np.uint8)
    #opencv要求mask数据类型必须是uint8
    #调用泛洪填充时,只有mask参数中像素值为0的区域才会被填充
    #mask用来规定我们在什么范围内才被允许做填充
    #此处mask全部为0,所以整个图像都会被考虑
    cv2.floodFill(copying,mask,(30,30),(0,255,255),(10,10,10),(10,10,10),cv2.FLOODFILL_FIXED_RANGE)
    #第三个参数为种子像素,也就是填充的起始点(30,30)
    #第四参数(0,255,255)表示填充的颜色(这里是黄色)
    #第五参数规定像素值范围下限,下限为 种子像素值-(100,100,100)
    #第六参数规定像素值范围上限,上限为 种子像素值+(50,50,50)
    cv2.imshow("floodfill",copying)
    
def fill_binary_demo():
    """二值填充,通过限定mask中像素值为0的区域来规定填充区域"""
    
    img = np.zeros([400,400,3],dtype=np.uint8)
    img[100:300,100:300,:] = 255
    copying = img.copy()
    h, w = copying.shape[0:2]
    mask = np.ones([h+2,w+2,1],dtype=np.uint8)
    #mask初始全部为1
    mask[151:251,151:251,:] = 0
    #设置允许填充区域(mask中像素值为0的区域才允许被填充)
    #此时填充既受到原图影响,又受到mask影响
    cv2.floodFill(copying,mask,(200,200),(45,25,255),cv2.FLOODFILL_MASK_ONLY)
    #第三个参数为种子像素,也就是填充的起始点(200,200)
    #第四参数(0,255,255)表示填充的颜色(这里是黄色)
    cv2.imshow("floodfill_bin",copying)
    


print("--------------------hello python!--------------------")
src = cv2.imread("D:/Picture/wallhaven-2712.jpg")


fill_color_demo(src)
fill_binary_demo()


cv2.waitKey(0)
cv2.destroyAllWindows()



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值