<p>在Python OpenCV中去除颜色(绿色)饱和度的正确方法是在HSV颜色空间中工作</p>
<ul>
<li>读取输入</li>
<li>转换为HSV和独立频道</li>
<li>去饱和S通道</li>
<li>与原始H和V通道合并</li>
<li>转换回BGR</li>
<li>创建一个1D LUT图像,该图像除绿色区域为白色外,其余区域均为黑色</li>
<li>将LUT应用于H通道并另存为范围为0到1的掩码</li>
<li>创建一个混合图像,即遮罩为白色(对应于绿色)的去饱和图像和遮罩为黑色(绿色除外)的原始图像</li>
<li>保存为结果</li>
</ul>
<br/>
<p>输入:</p>
<p><a href="https://i.stack.imgur.com/uW0aM.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/uW0aM.jpg" alt="enter image description here"/></a></p>
<pre><code>import cv2
import numpy as np
img = cv2.imread("barn.jpg")
percent = 0.5
#percent = 0.25
#percent = 0
# convert to HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h,s,v = cv2.split(hsv)
# desaturate
s_desat = cv2.multiply(s, percent).astype(np.uint8)
hsv_new = cv2.merge([h,s_desat,v])
bgr_desat = cv2.cvtColor(hsv_new, cv2.COLOR_HSV2BGR)
# create 1D LUT for green
# (120 out of 360) = (60 out of 180) +- 25
lut = np.zeros((1,256), dtype=np.uint8)
white = np.full((1,50), 255, dtype=np.uint8)
lut[0:1, 35:85] = white
print(lut.shape, lut.dtype)
# apply lut to hue channel as mask
mask = cv2.LUT(h, lut)
mask = mask.astype(np.float32) / 255
mask = cv2.merge([mask,mask,mask])
# mask bgr_desat and img
result = mask * bgr_desat + (1 - mask)*img
result = result.clip(0,255).astype(np.uint8)
# save result
cv2.imwrite('barn_desat2_0p5.jpg', result)
#cv2.imwrite('barn_desat2_0p25.jpg', result)
#cv2.imwrite('barn_desat2_0.jpg', result)
cv2.imshow('img', img)
cv2.imshow('bgr_desat', bgr_desat)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
</code></pre>
<br/>
<p>使绿50%去饱和:</p>
<p><a href="https://i.stack.imgur.com/hMEw5.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/hMEw5.jpg" alt="enter image description here"/></a></p>
<p>去饱和绿25%:</p>
<p><a href="https://i.stack.imgur.com/Xjs8d.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Xjs8d.jpg" alt="enter image description here"/></a></p>
<p>去饱和绿色0:</p>
<p><a href="https://i.stack.imgur.com/uvNrB.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/uvNrB.jpg" alt="enter image description here"/></a></p>