Python 更改图像的调色板

Python 更改图像的调色板,python,image,python-imaging-library,rgb,Python,Image,Python Imaging Library,Rgb,我正在尝试编写一个程序,将图像的调色板转换为自定义的预定调色板。 不幸的是,它不工作,我认为问题在于我如何转换颜色。为此,我只是将每个像素的RGB值与自定义调色板的RGB值进行比较,然后用与原始RGB值差异最小的RGB替换像素颜色 导入PIL、数学、numpy 从colormap导入hex2rgb 从colormap导入rgb2hex 从PIL导入图像 rgb_pallete_r、rgb_pallete_g、rgb_pallete_b=[]、[]、[]#为自定义调色板的rgb值创建列表 hex_

我正在尝试编写一个程序,将图像的调色板转换为自定义的预定调色板。 不幸的是,它不工作,我认为问题在于我如何转换颜色。为此,我只是将每个像素的RGB值与自定义调色板的RGB值进行比较,然后用与原始RGB值差异最小的RGB替换像素颜色

导入PIL、数学、numpy
从colormap导入hex2rgb
从colormap导入rgb2hex
从PIL导入图像
rgb_pallete_r、rgb_pallete_g、rgb_pallete_b=[]、[]、[]#为自定义调色板的rgb值创建列表
hex_pallete=list(color_map)#创建调色板中所有十六进制值的列表
对于范围内的i(0,len(hex_pallete)):#将每个调色板颜色的单个rgb添加到相应列表中
rgb_pallete_r.append(hex2rgb(hex_pallete[i])[0])
rgb_pallete_g.append(hex2rgb(hex_pallete[i])[1])
rgb_pallete_b.append(hex2rgb(hex_pallete[i])[2])
def convert_图像(路径、高度、宽度):
颜色=[]
image=image.open(path)#使用PIL加载映像
新建图像=图像。调整大小((宽度,高度))#调整图像大小,使其成为所需的高度和宽度(以像素为单位)
对于范围内的x(宽度):#循环x轴上的所有像素
对于范围内的y(高度):#循环通过y轴上的所有像素
r、 g,b=new_image.getpixel((x,y))#获取像素的RGB颜色值
COLOR.append(r),COLOR.append(g),COLOR.append(b)#将r.g b值添加到相应的活动列表中,以备以后使用
新图像。放置像素((x,y),替换颜色(r,g,b))#用新颜色替换像素
结果=新建图像。调整大小(图像。大小,图像。最近)#将图像大小调整为原始大小
result.show()#显示图像
def更换颜色(r、g、b):
持有_颜色,log=[],[]#持有所有距离和索引
hex_pallete=list(color_map)#从口述中获取颜色的十六进制值
对于范围内的i(0,len(十六进制托盘)):#循环托盘中的所有颜色
距离=数学.sqrt(abs((rgb_pallete_r[i]-r)^2+(rgb_pallete_g[i]-g)^2+(rgb_pallete_b[i]-b)^2))#计算从像素rgb到pallete rgb的距离
按住_colors.append(distance)#将距离添加到列表中
追加(i)#将索引添加到单独的列表中
new_color=numpy.argmin(保持_colors)#返回最小距离
打印(rgb_pallete_r[新颜色]、rgb_pallete_g[新颜色]、rgb_pallete_b[新颜色])以进行调试
返回rgb_pallete_r[新颜色]、rgb_pallete_g[新颜色]、rgb_pallete_b[新颜色]#返回新rgb
我不确定我做错了什么,但我认为要么是在计算距离,要么是在返回值的时候