示例中,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後的圖片: