【发布时间】:2021-08-29 00:26:25
【问题描述】:
尝试使用蒙版重新着色头发。首先从主图像中分割头发并试图使其成为一个真实的改变 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)
The result according to my code:
第 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 --> green mask
【问题讨论】:
-
您可以使用
+=或-=添加/减去颜色。我相信你得到了整数值的溢出(例如,添加 120 个原因超过 255)。 -
@decadenza 感谢您的回复。根据您的建议,我尝试更改范围内的值,但没有任何反应!你能检查我的 PART-2(上面的编辑代码)。我尝试使用蒙版叠加来改变颜色,但没有发生任何事情!
标签: python opencv colors python-imaging-library image-segmentation