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

浪尽此生 提交于 2019-12-29 23:52:59

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!