如何使用蒙版为图像对象重新着色?

How to recolor image object using mask?

尝试使用面具重新染发。首先从主图像中分割头发并试图使它成为一个真实的 HSV 值变化但根据我的代码结果不是我正在寻找的准确输出。有什么解决办法吗?

img = cv2.imread('model-demo.jpg')
img = cv2.resize(img, (256, 256))
_, mask_hair = cv2.threshold(mask_hair, thresh=210, maxval=255, type=cv2.THRESH_BINARY)

#cutting specific portion of hair from image
cut_mask = np.invert(mask_hair)
res = np.where(cut_mask, 0, img)

#HSV value changing for new color
hsv = cv2.cvtColor(res, cv2.COLOR_BGR2HSV)
hsv[:,:,0] +=120
hsv[:,:,1] +=60
hsv[:,:,2] -=20
hsv = cv2.cvtColor(res, cv2.COLOR_HSV2RGB)

plt.imshow(hsv)

我有的图片:

根据我的代码得到的结果:

我想要的结果:

第 2 部分

也尝试过将图像蒙版与颜色相乘,但结束它甚至无关紧要...

img = cv2.resize(cv2.imread('model-demo.jpg'),(256,256))
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
mask = cv2.resize(cv2.imread('./mask.jpg'),(256,256))

mask_clr = np.zeros([256,256,3],dtype=np.uint8)
mask_clr[np.where((mask_hair==255).all(axis = 2))] = [0, 255, 0]

imgMultiply = cv2.multiply(img,mask_clr)

mask_clr --> 绿色遮罩:

我已经为你的项目做了一个简单的程序

首先我用这段代码得到了一个面具https://docs.opencv.org/3.4/da/d97/tutorial_threshold_inRange.html。此代码使用 inRange 函数。

之后我使用下面的代码得到了结果

a = np.where(frame_threshold > 0)
ones = np.ones_like(img)
ones[a] = [0.5,1,0.5]
r = img*ones

我得到的结果

如果您将值更改为 [0.3,1,1],它将变成黄色。

如果值为[0.3,0.1,1]

则为红色

如果值为[1.5,1.0,0.8]

,则为蓝绿色