python 获取图片像素点颜色,python图片上色
在Groove music中,当我们换歌时,底部播放列表的颜色会随着专辑封面而变化,这就是提取主题颜色。本文将使用Python来提取图片的主题颜色。有兴趣的可以看看。
00-1010前言实施过程安装依赖提取主题颜色测试
目录
在Groove music中,当我们更换歌曲时,底部播放列表的颜色会随着专辑封面而变化。比如下图中播放列表的颜色变成了爱子衣服的颜色。接下来,我们将在python中实现同样的效果,即从图片中提取主题颜色。
前言
实现流程
提取主题颜色的方法有很多,比如用k-means聚类选择K个RGB坐标的聚类中心,但是速度会差一些。这里,我们换成中值分割法。已经有人为我们实现了这个算法,我们可以尽快使用它。
pip安装颜色小偷
安装依赖
虽然color-thickness可以很好地提取候选主题颜色,但我们仍然需要亲自选择合适的主题颜色,甚至对主题颜色进行一些微调。比如上图中的文字是浅色的,如果提取的主题颜色也是浅色的,效果会很差。代码如下:
#编码: utf-8
从数学导入楼层
将numpy作为np导入
从颜色窃贼导入颜色窃贼
类别DominantColor:
图像主题颜色类
@classmethod
def getDominantColor(cls,imagePath: str):
获取指定图片的主题颜色。
因素
-
图像路径:字符串
图片路径
返回
-
r,g,b: int
主题颜色每个通道的灰度值
color thief=color thief(image path)
#调整图像尺寸以加快操作速度。
if max(color thief . image . size)400:
color thief . image=color thief . image . resize((400,400))
palette=color thief . get _ palette(quality=9)
#调整调色板亮度
调色板=cls。__adjustPaletteValue(调色板)
对于调色板中的RGB[:]:
h,s,v=cls.rgb2hsv(rgb)
如果h 0.02:
调色板.移除(rgb)
如果len(调色板)=2:
破裂
#选择主题颜色
调色板=调色板[:5]
palette . sort(key=lambda RGB : cls . color fulness(* RGB),reverse=True)
返回调色板[0]
@classmethod
def __adjustPaletteValue(cls,palette:列表):
调整调色板的亮度
newPalette=[]
对于调色板中的RGB :
h,s,v=cls.rgb2hsv(rgb)
如果v 0.9:
因子=0.8
elif 0.8 v=0.9:
因子=0.9
elif 0.7 v=0.8:
因子=0.95
else:
因子=1
v *=因子
new palette . append(cls . hsv2 RGB(h,s,v))
返回新调色板
@静态方法
定义rgb2hsv(rgb:元组)-元组:
rgb空间被转换到hsv空间
r,g,b=[i/255代表rgb中的I]
mx=max(r,g,b)
mn=min(r,g,b)
df=mx - mn
如果mx==mn:
h=0
elif mx==r:
h=(60 *(g-b)/df)360)% 360
elif mx==g:
h=(60 *(b-r)/df)120)% 360
elif mx==b:
h=(60 *(r-g)/df)240)% 360
如果mx==0,则s=0,否则df/mx
v=mx
返回h、s、v
@静态方法
def hsv2rgb(h,s,v) - tuple:
hsv空间被转换到rgb空间
h60=h/60.0
h60f=地板(h60)
hi=int(h60f) % 6
f=h60 - h60f
p=v * (1 - s)
q=v * (1 - f * s)
t=v * (1 - (1 - f) * s)
r,g,b=0,0,0
如果hi==0:
r,g,b=v,t,p
elif hi==1:
r,g,b=q,v,p
elif hi==2:
r,g,b=p,v,t
elif hi==3:
r,g,b=p,q,v
elif hi==4:
r,g,b=t,p,v
elif hi==5:
r,g,b=v,p,q
r,g,b=int(r * 255),int(g * 255),int(b * 255)
返回r,g,b
@静态方法
定义色彩(r: int,g: int,b: int):
rg=np .绝对
yb=np.absolute(0.5 * (r g) - b)
rg_mean,rg_std=np.mean(rg),np.std(rg)
yb_mean,yb_std=np.mean(yb),np.std(yb)
STD _ root=NP . sqrt(rg _ STD * * 2 Yb _ STD * * 2)
均值根=NP . sqrt(rg _均值** 2 yb _均值* * 2)
返回标准根0.3 *平均值根
提取主题色
下面是部分图片的测试结果。我感觉效果挺好的:
关于基于Python的图像主题颜色提取的这篇文章到此为止。关于Python主题颜色提取的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。