python 获取图片像素点颜色,python图片上色

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: