gpt4 book ai didi

python - 如何使用 mask 更改图像的颜色?

转载 作者:行者123 更新时间:2023-12-02 16:05:19 26 4
gpt4 key购买 nike

我正在编写一个代码来改变一个人面部图片中头发的颜色。这样做我做了一个模型,并且能够得到头发部分的面具。但是现在我遇到了如何改变它的颜色的问题。
下面是传递的输出掩码和输入图像。
enter image description here enter image description here
你能告诉我可以用来把头发的颜色变成不同颜色的方法吗?

最佳答案

由于它们都具有相同的形状,因此您可以使用 mask 图像 mask 脸部图像。我们首先需要对其进行二进制阈值处理,因此可以将其用作黑白掩码。然后我们可以根据一个值是 0 还是 255 进行 bool 索引,并分配一个新的颜色,比如绿色?

import cv2
mask = cv2.imread('eBB2Q.jpg')
face = cv2.imread('luraB.jpg')

_, mask = cv2.threshold(mask, thresh=180, maxval=255, type=cv2.THRESH_BINARY)
# copy where we'll assign the new values
green_hair = np.copy(face)
# boolean indexing and assignment based on mask
green_hair[(mask==255).all(-1)] = [0,255,0]

fig, ax = plt.subplots(1,2,figsize=(12,6))
ax[0].imshow(cv2.cvtColor(face, cv2.COLOR_BGR2RGB))
ax[1].imshow(cv2.cvtColor(green_hair, cv2.COLOR_BGR2RGB))
enter image description here
现在我们可以使用 cv2.addWeighted 将新图像与原始图像组合,这将返回两个图像的加权和,因此我们只会看到蒙版区域的差异:
green_hair_w = cv2.addWeighted(green_hair, 0.3, face, 0.7, 0, green_hair)

fig, ax = plt.subplots(1,2,figsize=(12,6))
ax[0].imshow(cv2.cvtColor(face, cv2.COLOR_BGR2RGB))
ax[1].imshow(cv2.cvtColor(green_hair_w, cv2.COLOR_BGR2RGB))
enter image description here
请注意,您可以通过 alphabeta 参数设置加权总和中的权重,具体取决于您希望新颜色占主导地位的程度。请注意,如前所述,新图像将从加权和 dst = src1*alpha + src2*beta + gamma 中获得。让我们尝试使用另一种颜色并将权重设置为凸组合,alpha 值范围从 0.50.9 :
green_hair = np.copy(face)
# boolean indexing and assignment based on mask
green_hair[(mask==255).all(-1)] = [0,0,255]
fig, axes = plt.subplots(2,2,figsize=(8,8))
for ax, alpha in zip(axes.flatten(), np.linspace(.6, .95, 4)):
green_hair_w = cv2.addWeighted(green_hair, 1-alpha, face, alpha, 0, green_hair_w)
ax.imshow(cv2.cvtColor(green_hair_w, cv2.COLOR_BGR2RGB))
ax.axis('off')
enter image description here

关于python - 如何使用 mask 更改图像的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62891917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com