对一张图像中的不规则图形进行填充
固定颜色填充
用cv2.fillPoly
函数
img = cv2.imread('./001.png')
area = np.array([[1000, 200], [1500, 200], [1500, 400], [1000, 400]])
cv2.fillPoly(img,[area], color=(255, 255, 255))
效果如图,这里面可以传入多个area
坐标组,颜色自己设定
透明颜色填充
没有函数专门用来填充透明颜色
但是我们可以使用图像融合cv2.addWeighted
(注意使用这个方法只能对矩形填充透明颜色,不规则的图形不可以)
import cv2
import numpy as np
img = cv2.imread('./001.png')
# 创建一个三通道的图像 图像大小可以自己设定 np.zeros(H,W,C)
create_green = np.zeros((100,100,3),dtype=np.uint8)
# 设定图像三个通道的颜色值
# img[ y: y+h , x : x+w ] 分割图像
# numpy是BGR 所以第0个通道是B 蓝色 1是G 绿色 2是R 红色
create_green[:,:,0] = 0
create_green[:,:,1] = 255 #这里我创建一个纯绿色的图像
create_green[:,:,2] = 0
# 图像融合 两个图像必须一样大才能融合 0.7 和 0.3是参数
# 图像相加的公式是 R=a*x1+b*x2+c x1 x2代表两个图像 a b是两个参数 c是偏置项
# 可以调整融合度参数 来控制“透明度”
img_add = cv2.addWeighted(img[100:200,100:200], 0.7 ,create_green, 0.3, 0)
# 融合好的图像再拼回原图
img[100:200,100:200] = img_add
# 修改大小后展示出来
h_h = img.shape[0]
w_w = img.shape[1]
resize = cv2.resize(img,( int(w_w / 2) ,int(h_h / 2) ) ,interpolation = cv2.INTER_CUBIC)
cv2.imshow("test",resize)
cv2.waitKey(0)
效果如下: