我需要帮助创建一个遮罩的图像,其中部分图像是黑色由于遮罩,但有些部分仍然保留图像的原始颜色。想象一下,一个暴徒戴着滑雪面罩,眼睛和嘴巴的一部分是暴徒的皮肤,而脸的其余部分则被滑雪面罩覆盖。
基本上我想要的是眉毛,眼睛和嘴唇部分应该保留原来的形象,但其余的面具保持白色,如上图。 到目前为止,通过使用PIL,我已经成功地创建了一个面具,并填写了黑色的“眼睛”部分的内部
def getmask(img,jawline,eyebrows,eyes,mouth):
img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
imArray = np.asarray(img)
# create mask
polygon = jawline.flatten().tolist()
maskIm = Image.new('L', (imArray.shape[1], imArray.shape[0]), 0)
ImageDraw.Draw(maskIm).polygon(polygon, outline=1, fill='white')
#ImageDraw.Draw(maskIm).polygon(polygon, outline=(1))
# draw eyes
righteyes=eyes[0:6].flatten().tolist()
ImageDraw.Draw(maskIm).polygon(righteyes, outline=1,fill='black')
lefteyes=eyes[6:].flatten().tolist()
ImageDraw.Draw(maskIm).polygon(lefteyes, outline=1,fill='black')
mask = np.array(maskIm)
# draw eyebrows
rightbrows=eyebrows[0:6].flatten().tolist()
ImageDraw.Draw(maskIm).polygon(rightbrows, outline=2, fill='black')
leftbrows=eyebrows[6:].flatten().tolist()
ImageDraw.Draw(maskIm).polygon(leftbrows, outline=2, fill='black')
# draw mouth
mouth=mouth.flatten().tolist()
ImageDraw.Draw(maskIm).polygon(mouth, outline=1, fill='black')
mask = np.array(maskIm)
return mask
那些下颚线,眉毛,眼睛,嘴巴包含了(x,y)坐标为脸的相关部分,我只需要保留眉毛,眼睛和嘴巴部分的颜色。希望有人能帮我解决
如果你有一个遮罩,你想保留的区域是白色的,那么你只需在原始图像上用它做一个
bitwise_or
。你知道吗在你的情况下,我们必须反转掩模,使背景是黑色的,投资回报率是白色的。你知道吗
下面是一个输出示例:
对于他的脸的其余部分是黑色的,你只需要在面具中将ROI之外的所有值设置为黑色。一种方法是使用
提供的坐标
np.where(mask != 0)
示例代码:
https://colab.research.google.com/drive/1vCMhgDXmuFMJpxChuLN6TDEqgXi7V8CT
相关问题 更多 >
编程相关推荐