【发布时间】:2022-02-22 11:12:30
【问题描述】:
我有这张图片:
对于胡须,我有这个面具:
我想用这样的透明背景的面具剪掉胡须:
我遵循了SO post 的尝试。这里是:
for img in input_images:
gaberiel = Image.open(path + '/gaberiel-images/' + img)
beard_mask = imread(path + '/gaberiel-masks/' + 'beard_binary_' + img[:-4] + '.png', cv2.IMREAD_GRAYSCALE)
gaberiel_x, gaberiel_y = gaberiel.size
beard_mask_x, beard_mask_y, _ = beard_mask.shape
x_beard_mask= min(gaberiel_x, beard_mask_x)
x_half_beard_mask = beard_mask.shape[0] // 2
mask_beard = beard_mask[x_half_beard_mask - x_beard_mask // 2: x_half_beard_mask + x_beard_mask // 2 + 1, :gaberiel_y]
gaberiel_width_half = gaberiel.size[1] // 2
gaberiel_to_mask = gaberiel[:, gaberiel_width_half - x_half_beard_mask:gaberiel_width_half + x_half_beard_mask]
masked = cv2.bitwise_and(gaberiel_to_mask, gaberiel_to_mask, mask=mask_beard)
tmp = cv2.cvtColor(masked, cv2.COLOR_BGR2GRAY)
_, alpha = cv2.threshold(tmp, 0, 255, cv2.THRESH_BINARY)
b, g, r = cv2.split(masked)
rgba = [b, g, r, alpha]
masked_tr = cv2.merge(rgba, 4)
plt.axis('off')
plt.imshow(masked_tr)
但这是我得到的错误:
gaberiel_to_mask = gaberiel[:, gaberiel_width_half - x_half_beard_mask:gaberiel_width_half + x_half_beard_mask]
TypeError: 'PngImageFile' object is not subscriptable
我认为我的尝试总体上很糟糕。有没有办法可以简化这个过程?
【问题讨论】:
标签: python machine-learning computer-vision semantic-segmentation