你和你的女神之间,差了一个OpenCV口红色号识别器(1)

本文介绍了如何使用机器学习和视觉分析技术,通过Github上的口红颜色数据库,识别口红色号,包括提取番茄图片的RGB值并与口红品牌系列的颜色进行对比。文章还探讨了如何应用Dlib库进行人脸检测和嘴唇区域裁剪,以实现更精确的人像口红色号识别。此外,还提及了作者关于Android开发的学习资源和建议。
摘要由CSDN通过智能技术生成

好啦,废话不多说,马上开始教学时间!

要想识别口红色号,先得让机器知道到底都有哪些颜色。

听柜姐介绍,红色系有:“草莓红、铁锈红、枫叶红…”,其他还有“豆沙色、吃土色、番茄色…

世界观还未建立完全就要开始土崩瓦解,这看着有区别吗?“豆沙色最为百搭,橘调的番茄色比较显白…”眼前的黑不是黑,你说的红是什么红?

还好,在万能的 Github 上找到了一个宝藏数据库“口红颜色可视化”,这个数据库堪比口红的色号宇宙,不仅囊括了当前最主流品牌的各种系列色号,还很良心的在色盘上排列了出来。

这个数据集是一个嵌套的字典数据结构,存为 json 串的形式,里面记录了每个口红品牌系列下不同口红色号的颜色 id、名称、和 16 进制颜色值。

直!男!救!星!有木有!

不过看着这密密麻麻的颜色,真心佩服各大口红品牌的文案高手,是怎么样区别每一个看不出区别的颜色,并且还要分别取名字的。

傻傻分不清的我对 5 个品牌的不同系列做了一下统计和色号录入,于是,剩下的就交给计算机啦。

#####先用番茄做个实验?

既然有了如此完备的色号数据库,那么文摘菌就有了一个讨巧的方法:要想找到合适的色号,可以直接截取颜色,然后在数据库中进行比对。

这个方法非常好操作,在上唇色之前,我们不如先拿别的红色物品来练手。

比如,这里有一只番茄图片,你看这个番茄它又大又圆:

在其中截取了成色均匀、无高亮的矩形图片:

提取这张纯色图片的 RGB 值在技术上是可行的,getcolor.py 代码如下:

import colorsys
import PIL.Image as Image

def get_dominant_color(image):
max_score = 0.0001
dominant_color = None
for count,(r,g,b) in image.getcolors(image.size[0]*image.size[1]):

转为HSV标准

saturation = colorsys.rgb_to_hsv(r/255.0, g/255.0, b/255.0)[1]
y = min(abs(r2104+g4130+b*802+4096+131072)>>13,235)
y = (y-16.0)/(235-16)

#忽略高亮色
if y > 0.9:
continue
score = (saturation+0.1)*count
if score > max_score:
max_score = score
dominant_color = (r,g,b)
return dominant_color

为了减少误差,需要裁剪多个不同位置的图片,保存在本地的一个文件夹中,读取文件,提取颜色,求平均值,得到的番茄最终的 RGB 颜色,代码如下:

import os
import getcolor
from os.path import join as pjoin
from scipy import misc

def load_color(color_dir,list):
count = 0
for dir in os.listdir(color_dir):
img_dir = pjoin(color_dir, dir)
image = getcolor.Image.open(img_dir)
image = image.convert(‘RGB’)
get=getcolor.get_dominant_color(image)
list.append(get)
count = count+1
#print(person_dir)
#print(count)
return count

def Mean_color(count,list):
Mean_R=Mean_G=Mean_B=0
for i in range(count):

  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值