You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化Python中的颜色图层蒙版以呈现中间调?

实现带灰度中间调的图层蒙版(类似Photoshop效果)

问题描述

用Python创建图层蒙版时,蒙版仅能呈现纯黑/纯白的二进制状态,无法体现颜色匹配强度,需要实现类似Photoshop的带灰色中间调的蒙版效果。

当前代码

import cv2
import numpy as np  # 补充原代码缺失的numpy导入

image = cv2.imread('grade_0.jpg')

lower = np.array([0,0,0])
upper = np.array([12,255,255])

mask = cv2.inRange(cv2.cvtColor(image, cv2.COLOR_BGR2HSV), lower, upper)  
mask = 255 - mask
# mask = cv2.bitwise_not(mask) #inverting black and white
output = cv2.bitwise_and(image, image, mask = mask)

cv2.imshow("output", output)
cv2.imshow("mask", mask)
cv2.waitKey()

效果对比

参考效果

  • 参考蒙版效果:参考蒙版效果
  • 参考输出效果:参考输出效果

当前代码生成效果

  • 当前蒙版效果:当前蒙版效果
  • 当前输出效果:当前输出效果

原始图片

  • 原始图片1:原始图片1
  • 原始图片2:原始图片2

解决方案

要生成带灰度中间调的蒙版,需放弃cv2.inRange的二值化逻辑,改为计算像素与目标颜色的匹配强度,生成0-255区间的灰度蒙版,再通过加权融合实现半透明效果:

优化后代码

import cv2
import numpy as np

image = cv2.imread('grade_0.jpg')
hsv_img = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# 目标颜色范围(HSV)
lower_hsv = np.array([0, 0, 0])
upper_hsv = np.array([12, 255, 255])

# 分别计算HSV三通道的匹配度,生成单通道灰度图
h_match = np.where((hsv_img[:, :, 0] >= lower_hsv[0]) & (hsv_img[:, :, 0] <= upper_hsv[0]), 255, 0)
s_match = np.where((hsv_img[:, :, 1] >= lower_hsv[1]) & (hsv_img[:, :, 1] <= upper_hsv[1]), 255, 0)
v_match = np.where((hsv_img[:, :, 2] >= lower_hsv[2]) & (hsv_img[:, :, 2] <= upper_hsv[2]), 255, 0)

# 合并三通道匹配度,生成灰度蒙版(可根据需求调整通道权重)
mask = (h_match + s_match + v_match) // 3
# 反转蒙版,与原代码逻辑保持一致
mask = 255 - mask

# 将单通道蒙版转为3通道,方便与原图进行加权融合
mask_3ch = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
# 通过加权计算实现半透明效果,替代仅支持二值蒙版的bitwise_and
output = (image * (mask_3ch / 255)).astype(np.uint8)

cv2.imshow("output", output)
cv2.imshow("mask", mask)
cv2.waitKey(0)
cv2.destroyAllWindows()

代码说明

  1. 拆分HSV通道匹配计算,避免cv2.inRange直接生成二值图,保留颜色匹配的强度差异
  2. 采用加权融合替代cv2.bitwise_and,利用灰度蒙版的中间值实现平滑的半透明过渡
  3. 若需要更精准的颜色相似度,可改用欧氏距离、余弦相似度等算法计算像素与目标颜色的接近程度,生成更细腻的灰度蒙版

内容的提问来源于stack exchange,提问作者DrakeJest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:17:35