opencv-python给图片添加半透明mask

思路:

  1. 读取原始图片
  2. 根据给定坐标信息,绘制mask
  3. 将原始图片与mask融合

示例中,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:
在这里插入图片描述

添加mask后的图片:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41735859/article/details/103758249