将图像重新着色为其他基色并保持渐变

时间:2018-08-15 18:47:11

标签: python numpy opencv

我想将图像重新着色为另一种基本颜色,从而保持渐变。例如,在这张图片中,基色是绿色。

enter image description here

,我想将其更改为例如蓝色(RGB:0,119,153)。我使用了以下python代码:

import numpy as np
import cv2
dg = [0,59,10]
mg = [0,91,16]
lg = [0,106,18]
db = [92,71,0]
mb = [153,119,0]
lb = [204,163,93]

im = cv2.imread("C:/Temp/recolor_source.png")
im[np.where((im == dg).all(axis=2))] = db
im[np.where((im == mg).all(axis=2))] = mb
im[np.where((im == lg).all(axis=2))] = lb
cv2.imwrite("C:/Temp/recolor_result.png", im)

给出以下结果:

enter image description here

结果文本中的白色文字和变灰按钮中仍然有一些绿色。转换为另一种基本颜色并保留所有渐变的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这是Mark Setchell提出的答案。

import cv2

im = cv2.imread("C:/Temp/recolor_source.png")
hsv = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
hchannel = hsv[:, :, 0]
hchannel = 40 + hchannel
hsv[:, :, 0] = hchannel
rgb = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)

cv2.imwrite("C:/Temp/recolor_result.png", rgb)

导致: enter image description here