python设置颜色_使用python改变颜色的色调

我正在寻找一种方法来改变一种颜色的色调,知道它是RGB合成,然后用获得的RGB替换旧RGB的所有实例。例如,我希望红色变成紫色,浅红色,浅紫色,等等。。。

它可以在photoshop中通过改变颜色的色调来完成。在

到目前为止我的想法是:把RGB转换成HLS,然后改变色调。在

以下是到目前为止的代码(在“列表”列表中定义了多种颜色,而不仅仅是一种颜色):

(正如您可能注意到的,我只是一个初学者,代码本身相当脏;更干净的部分可能是从其他SO用户那里获取的)

谢谢!在import colorsys

from tempfile import mkstemp

from shutil import move

from os import remove, close

def replace(file, pattern, subst):

#Create temp file

fh, abs_path = mkstemp()

new_file = open(abs_path,'w')

old_file = open(file)

for line in old_file:

new_file.write(line.replace(pattern, subst))

#close temp file

new_file.close()

close(fh)

old_file.close()

#Remove original file

remove(file)

#Move new file

move(abs_path, file)

def decimal(var):

return '{:g}'.format(float(var))

list=[[60,60,60],[15,104,150],[143,185,215],[231,231,231],[27,161,253],[43,43,43],[56,56,56],[255,255,255],[45,45,45],[5,8,10],[23,124,193],[47,81,105],[125,125,125],[0,0,0],[24,24,24],[0,109,166],[0,170,255],[127,127,127]]

for i in range(0,len(list)):

r=list[i][0]/255

g=list[i][1]/255

b=list[i][2]/255

h,l,s=colorsys.rgb_to_hls(r,g,b)

print(decimal(r*255),decimal(g*255),decimal(b*255))

h=300/360

str1=str(decimal(r*255)) + "," + str(decimal(g*255)) + "," + str(decimal(b*255))

r,g,b=colorsys.hls_to_rgb(h, l, s)

print(decimal(r*255),decimal(g*255),decimal(b*255))

str2=str(decimal(r*255)) + "," + str(decimal(g*255)) + "," + str(decimal(b*255))

replace("Themes.xml",str1,str2)

编辑:问题很简单:R,G,B和H必须在0和1之间,我把它们设置在0到255和0到360之间。更新代码。在

Python中,你可以使用PIL(Pillow)库或者更高级的图像处理库如OpenCV来操作图像的颜色空间,包括转换到Lab色彩模型。Lab色彩模型是一种设备无关的颜色空间,通常用于色彩校正和对比度增强。 如果你想要修改图像的Lab颜色值,首先需要读取图片,然后对每个像素点的L(亮度)、A(绿色至红色色调)和B(蓝色至黄色的色调)分量进行操作,最后保存修改后的图像。下面是一个简单的示例: ```python from PIL import Image def change_lab_values(image_path, output_path, l_value, a_value, b_value): # 1. 打开图像 img = Image.open(image_path) # 2. 转换为Lab模式 lab_img = img.convert('LAB') # 3. 获取宽度、高度和所有像素的Lab元组列表 width, height = lab_img.size pixels = list(lab_img.getdata()) # 4. 对每个像素的Lab值进行操作 (注意范围限制:0-100 for L, -128 to 127 for A and B) new_pixels = [(l_value, a_value, b_value) if pixel < 100 else pixel for pixel in pixels] # 5. 将像素数据放回新的Image对象 modified_image = Image.new('RGB', img.size) modified_image.putdata(new_pixels) # 6. 保存修改后的图像 modified_image.save(output_path) # 使用函数 change_lab_values('input.jpg', 'output.jpg', 50, 20, -10) ``` 这个例子将图像的所有像素的亮度L值设置为50,并调整了A和B值。请注意,直接修改像素值可能会影响图像质量,特别是超出色彩空间范围的部分可能会导致意外的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值