【问题标题】:How to recolor image object using mask?如何使用蒙版重新着色图像对象?
【发布时间】: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 image I have:

The result according to my code:

The result I want:

第 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


【解决方案1】:

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

首先我使用此代码获取掩码 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],它将是绿色的蓝色

【讨论】:

  • @abbs 感谢您的回答和建议。您能否详细说明这些值 -> [0.5,1,0.5] ?将任何颜色与 rgb 混合是正确的方法吗?
  • 这一行的另一件事是我的代码出错了我不得不将其更改为 [np.where((mask_hair>0).all(axis = 2))] = [0.5,1 ,0.5]
  • @MSI 基本上我有(RGB)值的因素。因此,如果我希望颜色为绿色,则绿色值必须是最大的。因此,如果我将所有 R 和 B 乘以 0.5 并将 G 乘以 1,颜色将变得更绿。希望能回答你的问题。如果您觉得我的回答有帮助,请为我的回答投票,我将不胜感激。
  • 是的,是的!只是一个小小的询问。如果我想让它变成黄色,可以吗?
  • 基本上这些因素是针对 [B,G,R] 的,所以主色应该是最大的。查看我添加的示例
猜你喜欢
  • 1970-01-01
  • 2020-11-03
  • 2017-02-05
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
  • 2015-07-02
  • 2020-05-13
  • 2015-07-09
相关资源
最近更新 更多