下面我将为你详细讲解"Python判断、获取一张图片主色调的2个实例"的完整攻略。
1. 使用Python Pillow库
Pillow是Python Image Library的一个分支,它提供了一组强大的图像处理功能,可以用于对图像的读取、切割、拼接、调整大小、旋转、滤镜等各种操作。下面是使用Pillow库获取图片主色调的示例代码:
from PIL import Image
import colorsys
def get_image_main_color(image_path):
with Image.open(image_path) as im:
# 获取图像中每种颜色的像素值
pixels = im.getcolors(im.size[0] * im.size[1])
# 按像素值从大到小排序
sorted_pixels = sorted(pixels, key=lambda t: t[0], reverse=True)
# 取最大的像素值作为主色调
max_color = sorted_pixels[0][1]
# 将RGB转换成HSB(色相、饱和度、亮度)格式
h, s, v = colorsys.rgb_to_hsv(*[x/255.0 for x in max_color])
# 将HSB转换成RGB格式
r, g, b = colorsys.hsv_to_rgb(h, s, v)
# 将RGB格式的整数值转换成十六进制字符串
hex_color = "{0:02x}{1:02x}{2:02x}".format(int(r*255), int(g*255), int(b*255))
return hex_color
使用该函数可以获取到图片的主色调,示例代码如下:
image_path = "test.jpg"
main_color = get_image_main_color(image_path)
print("The main color of image is: #" + main_color)
2. 使用Python颜色识别库
除了使用Pillow库以外,还可以使用Python的颜色识别库进行获取主色调。下面是使用颜色识别库获取图片主色调的示例代码:
from colormath.color_objects import RGBColor
from colormath.color_diff import delta_e_cie1976
from colormath.color_conversions import convert_color
import webcolors
from PIL import Image
def get_image_main_color(image_path):
with Image.open(image_path) as im:
# 获取图像中每种颜色的像素值
pixels = im.getcolors(im.size[0] * im.size[1])
# 按像素值从大到小排序
sorted_pixels = sorted(pixels, key=lambda t: t[0], reverse=True)
# 取前5种颜色
top_five = sorted_pixels[:5]
# 获取每种颜色对应的RGB值
colors = []
for count, color in top_five:
rgb = tuple([int(round(c)) for c in color])
colors.append(RGBColor(rgb[0], rgb[1], rgb[2]))
# 计算每种颜色与其它颜色之间的差异值
diffs = []
for color1 in colors:
diff = 0
for color2 in colors:
lab1 = convert_color(color1, RGBColor).convert_to('lab')
lab2 = convert_color(color2, RGBColor).convert_to('lab')
diff += delta_e_cie1976(lab1, lab2)
diffs.append(diff)
# 选择差异值最小的颜色作为主色调
index = diffs.index(min(diffs))
rgb = colors[index].get_value_tuple()
# 将RGB格式的整数值转换成十六进制字符串
hex_color = "{0:02x}{1:02x}{2:02x}".format(*rgb)
return hex_color
使用该函数可以获取到图片的主色调,示例代码如下:
image_path = "test.jpg"
main_color = get_image_main_color(image_path)
# 判断是否为标准颜色
try:
name = webcolors.rgb_to_name(tuple(int(main_color[i:i+2], 16) for i in (0, 2, 4)))
print("The main color of image is: " + name)
except ValueError:
print("The main color of image is: #" + main_color)
以上就是使用Python获取一张图片主色调的两个实例,希望可以帮助到你。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python判断、获取一张图片主色调的2个实例 - Python技术站