<p>下面是一种在Python OpenCV中去除绿色饱和度的简单方法。方法是转换成CMYK,然后使C和Y通道去饱和。不幸的是,OpenCV没有内置BGR2CMYK颜色转换。所以我们需要进行计算。此方法也会影响其他颜色</p>
<p>输入:</p>
<p><a href="https://i.stack.imgur.com/XmULV.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/XmULV.jpg" alt="enter image description here"/></a></p>
<pre><code>import cv2
import numpy as np
img = cv2.imread("barn.jpg")
scale = 255
percent = 0.5
#percent = 0.25
#percent = 0
# separate b,g,r
b,g,r = cv2.split(img)
b = b.astype(np.float32)
g = g.astype(np.float32)
r = r.astype(np.float32)
# convert to cmyk
# see
# https://stackoverflow.com/questions/14088375/how-can-i-convert-rgb-to-cmyk-and-vice-versa-in-python/41220097
# https://www.codeproject.com/Articles/4488/XCmyk-CMYK-to-RGB-Calculator-with-source-code
c = 1 - r / scale
m = 1 - g / scale
y = 1 - b / scale
k = cv2.min(cv2.min(c, m),y)
c = scale * (c - k) / (1 - k)
m = scale * (m - k) / (1 - k)
y = scale * (y - k) / (1 - k)
# desaturate neighbors of G which are C,Y
c = cv2.multiply(c, percent)
y = cv2.multiply(y, percent)
# convert back to bgr
r = scale * (1.0 - c / scale) * (1.0 - k)
g = scale * (1.0 - m / scale) * (1.0 - k)
b = scale * (1.0 - y / scale) * (1.0 - k)
r = r.clip(0,255).astype(np.uint8)
g = g.clip(0,255).astype(np.uint8)
b = b.clip(0,255).astype(np.uint8)
img_desat = cv2.merge([b,g,r])
# save result
cv2.imwrite('barn_desat_0p5.jpg', img_desat)
#cv2.imwrite('barn_desat_0p25.jpg', img_desat)
#cv2.imwrite('barn_desat_0.jpg', img_desat)
cv2.imshow('img', img)
cv2.imshow('img_desat', img_desat)
cv2.waitKey(0)
cv2.destroyAllWindows()
</code></pre>
<br/>
<p>去饱和至50%:</p>
<p><a href="https://i.stack.imgur.com/GsJCO.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/GsJCO.jpg" alt="enter image description here"/></a></p>
<p>将饱和度降至25%:</p>
<p><a href="https://i.stack.imgur.com/qslcn.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/qslcn.jpg" alt="enter image description here"/></a></p>
<p>将饱和度降至0:</p>
<p><a href="https://i.stack.imgur.com/kwSAI.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/kwSAI.jpg" alt="enter image description here"/></a></p>