'''
ROI(region of interest),
也就是感兴趣区域,如果你设置了图像了ROI,
那么在使用OpenCV的函数的时候,会只对ROI区域操作,
其他区域忽略。
'''
import cv2 as cv
import numpy as np
# 截取图片中的指定区域或在指定区域添加某一图片
def jie_image(src1):
# 截取第5行到89行的第500列到630列的区域
src2 = src1[20:100,500:700]
cv.imshow('intercept',src2) # 截取图片
src1[105:185,300:500] = src2 # 指定位置填充,大小要一样才能填充
cv.imshow('composite',src1) # 合成图片
# 指定颜色替换
def fill_image(image):
copyImage = image.copy() # 复制原图像
h,w = copyImage.shape[:2] # 读取图像的宽和高
# 注意是uint8,是不Unit8
mask = np.zeros([h+2,w+2],np.uint8) #新建图像矩阵 +2是官方函数要求
# 泛洪填充7个参数,够头疼的
cv.floodFill(copyImage, mask, (0, 80), (0, 100, 255), (100, 100, 50), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE)
'''
floodFill( 1.操作的图像, 2.掩模, 3.起始像素值,4.填充的颜色, 5.填充颜色的低值, 6.填充颜色的高值 ,7.填充的方法
参数5.填充颜色的低值就是:参数3 减去 参数5
参数6.填充颜色的高值就是:参数3 加上 参数6
即是这两个数值之间的色素替换为参数4的颜色
'''
cv.imshow('floodFill',copyImage)
# 指定位置填充
def fill_binary():
# 创建一张400*400的黑图
image = np.zeros([400,400,3],np.uint8)
image[50:350,50:350,:] = 255
cv.imshow('original',image)
# mask的大小一定比原图大2
#注意是uint8,是不Unit8 同样的错误一般还会再犯
mask = np.ones([402,402,1],np.uint8)
# 将下面的区域赋值为0
mask[103:301,101:301] = 0
# 进行指定位置填充
cv.floodFill(image,mask,(200, 200), (0, 0, 255),(10,10,10),(10, 10, 10), cv.FLOODFILL_MASK_ONLY)
cv.imshow('floodFill2',image)
if __name__ == '__main__':
'''
ROI切片填充
'''
# src = cv.imread('pic/bizhi.jpg')
# cv.imshow('original',src)
# jie_image(src)
# cv.waitKey(0)
# cv.destroyAllWindows()
'''
泛洪填充fill_image()
'''
# src = cv.imread('pic/bizhi.jpg')
# cv.imshow('original',src)
# fill_image(src)
# cv.waitKey(0)
# cv.destroyAllWindows()
'''
指定位置填充fill_binary()
'''
fill_binary()
cv.waitKey(0)
cv.destroyAllWindows()