示例中,mask为矩形框,如果是不规则点的分割mask,可以使用cv2.fillPoly()函数代替cv2.rectangle().
原始图片:
import numpy as np
import os
import cv2
def put_mask(img_path,output_fold):
# 1.读取图片
image = cv2.imread(img_path)
# 2.获取标签
# 一般的标签格式 bbox = [x, y, w, h]
bbox = [192, 364, 267, 37]
# 3.画出mask
zeros = np.zeros((image.shape))
bbox = [int(b) for b in bbox]
bbox[2] = bbox[2] + bbox[0]
bbox[3] = bbox[3] + bbox[1]
zeros_mask = cv2.rectangle(zeros, (bbox[0], bbox[1]), (bbox[2], bbox[3]),
color=(0,0,255), thickness=-1 ) #thickness=-1 表示矩形框内颜色填充
# 4.将画好的mask保存,再重新读取。
# 后面的cv2.addWeighted不能直接使用mask和原始图片融合,
# 至于为什么,我也不知道,反正直接用会报错。
cv2.imwrite('zeros_mask.jpg', zeros_mask)
mask = cv2.imread('zeros_mask.jpg')
try:
# alpha 为第一张图片的透明度
alpha = 1
# beta 为第二张图片的透明度
beta = 0.5
gamma = 0
# cv2.addWeighted 将原始图片与 mask 融合
mask_img = cv2.addWeighted(image, alpha, mask, beta, gamma)
cv2.imwrite(os.path.join(output_fold,'mask_img.jpg'), mask_img)
except:
print('异常')
put_mask(img_path = './images/img_0000063.jpg',
output_fold='./image_mask')
添加mask后的图片:
来源:CSDN
作者:景唯acr
链接:https://blog.csdn.net/weixin_41735859/article/details/103758249