如何在Python中使用OpenCV2对图像中的一种颜色进行饱和处理?

迈克尔·佩特

因此,我正在运行一些代码,该代码应允许我先降低饱和度然后饱和图像。我有一个应该允许我执行此操作的函数,但是无论我如何更改代码,它始终会改变颜色,因此不会降低饱和度。

我的职能:

def desaturation(img,percent=.5):
    imgGreen=img[:,:,1]
    desatGreen=imgGreen*percent
    desatImg=img[:,:,:]
    desatImg[:,:,1]=desatGreen
    return desatImg

每次运行它时,它都会将颜色转换为洋红色,而不是我期望的不饱和外观。我希望颜色范围仍保持在BGR中,而不是其他任何颜色范围。是否有任何代码可以帮助我完成这些工作,而不是依靠另一个内置函数来完成呢?

编辑:我设置了百分比变量,以便它永远不会超过1和永远不会低于0。

编辑:我想降低整个图像的饱和度。我的代码编写方式有点误导。

fmw42

这是在Python OpenCV中使绿色饱和的一种简单方法。这样做的方法是转换为CMYK,然后使C和Y通道去饱和。不幸的是,OpenCV没有内置的BGR2CMYK颜色转换。因此,需要进行计算。同样,此方法也会影响其他颜色。

输入:

在此处输入图片说明

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()

降低到50%:

在此处输入图片说明

降低到25%:

在此处输入图片说明

降低到0:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

OpenCV Python 如何在将图像转换为灰度时保持一种颜色

如何在pygame中从一种颜色渐变为另一种颜色?

Python 和 opencv:如何将此图像的所有背景转换为一种颜色或透明

从RGB图像中删除一种颜色

如何使海龟在Netlogo中以一种颜色移动

如何在下面的属性中设置另一种颜色?

如何在我的主题 vscode 中替换一种颜色

如何在Ubuntu 17.10上将登录屏幕的紫色更改为另一种颜色或图像(如果可能)?

在MATLAB中以一种颜色绘制2D高斯图像,但透明度水平却高低不一

在 ggplot2 中使用 oob 将值更改为另一种颜色

在 QT 中使字符串中的一个单词成为一种颜色

如何使用 GraphicsMagick Nodejs 用另一种颜色替换颜色

如何在 Google Cloud 功能中使用 OpenCV2 处理视频?

在 Python 中使用 OpenCv2 编写多个图像

如何为列中的每个值使用另一种颜色绘制数据框?

如何在按下时更改按钮的背景颜色并使用另一个按钮将颜色更改为另一种颜色

如何检查按钮颜色从一种颜色更改为另一种颜色

如何设置useState只选择一种颜色

从预制列表中随机选择一种颜色

使用imshow打印一种颜色

如何在CSS中创建3种颜色的渐变而不进行颜色升级

将HTML画布中的像素颜色处理为另一种颜色,但阴影相同

如何计算一种颜色与多少白色混合以创建另一种颜色?

如何使用 tmap 为每个坐标赋予另一种颜色

将RGB图像中特定颜色的像素更改为另一种颜色Matlab

从图像(命令行或代码)中删除除一种颜色以外的所有颜色

需要更快的方法来替换基于另一种颜色的图像中的颜色

无法更改一种颜色

iOS:如何在TabBar的UIImage中用另一种颜色替换特定颜色(选择和取消选择)?